From e2206cccd7a713056b4a37bdca09cf12198362dc Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Sun, 24 Sep 2023 16:19:47 +0200 Subject: [PATCH 01/13] ci: add initial ruff config Signed-off-by: Matej Focko --- .pre-commit-config.yaml | 6 ++++++ packit_service/worker/mixin.py | 2 +- ruff.toml | 24 ++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 ruff.toml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 78f217cef..736564d7e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -128,3 +128,9 @@ repos: - LICENSE_HEADER.txt - --comment-style - "#" + - repo: https://github.com/astral-sh/ruff-pre-commit + # Ruff version. + rev: v0.0.291 + hooks: + - id: ruff + args: [--fix, --exit-non-zero-on-fix] diff --git a/packit_service/worker/mixin.py b/packit_service/worker/mixin.py index 03d4849b2..b1dbc0e39 100644 --- a/packit_service/worker/mixin.py +++ b/packit_service/worker/mixin.py @@ -232,7 +232,7 @@ def local_project(self) -> LocalProject: ) if self.service_config.repository_cache else None - ) + ), ) working_dir = Path( Path(self.service_config.command_handler_work_dir) diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 000000000..61277182f --- /dev/null +++ b/ruff.toml @@ -0,0 +1,24 @@ +select = [ + # "B", # flake8-bugbear + # "C4", # flake8-comprehensions + # "COM", # flake8-commas + # "E", # pycodestyle Error + # "F", # Pyflakes + # "I", # isort + # "PERF",# Perflint + # "PIE", # flake8-pie +# "PT", # flake8-pytest-style, would be nice to enable + # "RET", # flake8-return + # "RUF", # Ruff-specific rules + # "SIM", # flake8-simplify + # "UP", # pyupgrade + # "W", # pycodestyle Warning +] +ignore = [ + "B017", # assert-raises-exception + "B022", # useless-contextlib-suppress + "RUF003"# Comment contains ambiguous character +] + +line-length = 100 +target-version = "py39" From c4d55a57138bc4ae7d52fe9a8743e0e90047bf01 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Tue, 22 Oct 2024 13:24:59 +0200 Subject: [PATCH 02/13] ci(ruff): enable flake8-bugbear Signed-off-by: Matej Focko --- packit_service/config.py | 2 +- packit_service/service/tasks.py | 2 +- packit_service/worker/handlers/distgit.py | 2 +- ruff.toml | 2 +- tests/conftest.py | 2 +- tests/integration/test_koji_build.py | 15 +++++++++------ tests/integration/test_pr_comment.py | 16 ++++++++-------- tests/integration/test_release_event.py | 2 +- tests/unit/test_allowlist.py | 4 +++- tests_openshift/conftest.py | 2 +- tests_openshift/database/test_models.py | 2 +- 11 files changed, 28 insertions(+), 23 deletions(-) diff --git a/packit_service/config.py b/packit_service/config.py index b56a62903..4359a77b0 100644 --- a/packit_service/config.py +++ b/packit_service/config.py @@ -260,7 +260,7 @@ def get_service_config(cls) -> "ServiceConfig": loaded_config = safe_load(open(config_file)) except Exception as ex: logger.error(f"Cannot load service config '{config_file}'.") - raise PackitException(f"Cannot load service config: {ex}.") + raise PackitException(f"Cannot load service config: {ex}.") from ex cls.service_config = ServiceConfig.get_from_dict(raw_dict=loaded_config) return cls.service_config diff --git a/packit_service/service/tasks.py b/packit_service/service/tasks.py index 2ba496155..874c855c1 100644 --- a/packit_service/service/tasks.py +++ b/packit_service/service/tasks.py @@ -105,7 +105,7 @@ def get_usage_interval_data( ) onboarded_projects_per_job = {} - for job, data in past_data["jobs"].items(): + for job, _ in past_data["jobs"].items(): onboarded_projects_per_job[job] = list( cumulative_projects_for_jobs[job] - cumulative_projects_for_jobs_past[job] ) diff --git a/packit_service/worker/handlers/distgit.py b/packit_service/worker/handlers/distgit.py index 4351d9ceb..12c6b3304 100644 --- a/packit_service/worker/handlers/distgit.py +++ b/packit_service/worker/handlers/distgit.py @@ -315,7 +315,7 @@ def sync_branch( kwargs=kargs, max_retries=RETRY_LIMIT_RELEASE_ARCHIVE_DOWNLOAD_ERROR, ) - raise AbortSyncRelease() + raise AbortSyncRelease() from ex raise ex finally: if self.packit_api.up.local_project: diff --git a/ruff.toml b/ruff.toml index 61277182f..5c5cd9e2d 100644 --- a/ruff.toml +++ b/ruff.toml @@ -1,5 +1,5 @@ select = [ - # "B", # flake8-bugbear + "B", # flake8-bugbear # "C4", # flake8-comprehensions # "COM", # flake8-commas # "E", # pycodestyle Error diff --git a/tests/conftest.py b/tests/conftest.py index cbd78ba07..21fb31dfc 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -480,7 +480,7 @@ def cache_clear(request): """ if getattr(request.module, "CACHE_CLEAR", None): - [f.cache_clear() for f in getattr(request.module, "CACHE_CLEAR")] + [f.cache_clear() for f in request.module.CACHE_CLEAR] @pytest.fixture() diff --git a/tests/integration/test_koji_build.py b/tests/integration/test_koji_build.py index 4834f79e6..76f5c6ffe 100644 --- a/tests/integration/test_koji_build.py +++ b/tests/integration/test_koji_build.py @@ -244,9 +244,12 @@ def test_is_already_triggered(build_info, result): ) flexmock(KojiHelper).should_receive("get_build_info").and_return(build_info) - DownstreamKojiBuildHandler( - package_config=flexmock(), - job_config=flexmock(), - event={}, - celery_task=flexmock(), - ).is_already_triggered("rawhide") is result + assert ( + DownstreamKojiBuildHandler( + package_config=flexmock(), + job_config=flexmock(), + event={}, + celery_task=flexmock(), + ).is_already_triggered("rawhide") + is result + ) diff --git a/tests/integration/test_pr_comment.py b/tests/integration/test_pr_comment.py index cc6cf34b0..52a7bd49b 100644 --- a/tests/integration/test_pr_comment.py +++ b/tests/integration/test_pr_comment.py @@ -654,7 +654,7 @@ def test_pr_test_command_handler( + str(jobs) + "}" ) - add_pull_request_event_with_pr_id_9 + _ = add_pull_request_event_with_pr_id_9 pr = flexmock(head_commit="12345") flexmock(GithubProject).should_receive("get_pr").and_return(pr) comment = flexmock() @@ -743,7 +743,7 @@ def test_pr_test_command_handler_identifiers( + str(jobs) + "}" ) - add_pull_request_event_with_pr_id_9 + _ = add_pull_request_event_with_pr_id_9 pr = flexmock(head_commit="12345") flexmock(GithubProject).should_receive("get_pr").and_return(pr) comment = flexmock() @@ -910,7 +910,7 @@ def test_pr_test_command_handler_retries( + str(jobs) + "}" ) - add_pull_request_event_with_sha_0011223344 + _ = add_pull_request_event_with_sha_0011223344 pr = flexmock( source_project=flexmock( get_web_url=lambda: "https://github.com/someone/hello-world" @@ -1098,7 +1098,7 @@ def test_pr_test_command_handler_retries( def test_pr_test_command_handler_skip_build_option( add_pull_request_event_with_sha_0011223344, pr_embedded_command_comment_event ): - add_pull_request_event_with_sha_0011223344 + _ = add_pull_request_event_with_sha_0011223344 jobs = [ { "trigger": "pull_request", @@ -1304,7 +1304,7 @@ def test_pr_test_command_handler_compose_not_present( + str(jobs) + "}" ) - add_pull_request_event_with_sha_0011223344 + _ = add_pull_request_event_with_sha_0011223344 pr = flexmock( source_project=flexmock( get_web_url=lambda: "https://github.com/someone/hello-world" @@ -1433,7 +1433,7 @@ def test_pr_test_command_handler_composes_not_available( + str(jobs) + "}" ) - add_pull_request_event_with_sha_0011223344 + _ = add_pull_request_event_with_sha_0011223344 pr = flexmock( source_project=flexmock( get_web_url=lambda: "https://github.com/someone/hello-world" @@ -1838,7 +1838,7 @@ def test_pr_test_command_handler_skip_build_option_no_fmf_metadata( add_pull_request_event_with_sha_0011223344, pr_embedded_command_comment_event, ): - add_pull_request_event_with_sha_0011223344 + _ = add_pull_request_event_with_sha_0011223344 jobs = [ { "trigger": "pull_request", @@ -2032,7 +2032,7 @@ def test_invalid_packit_command_without_config( def test_pr_test_command_handler_multiple_builds( add_pull_request_event_with_sha_0011223344, pr_embedded_command_comment_event ): - add_pull_request_event_with_sha_0011223344 + _ = add_pull_request_event_with_sha_0011223344 pr_embedded_command_comment_event["comment"][ "body" ] = "/packit test packit/packit-service#16" diff --git a/tests/integration/test_release_event.py b/tests/integration/test_release_event.py index 3a7a99f40..f31d79c90 100644 --- a/tests/integration/test_release_event.py +++ b/tests/integration/test_release_event.py @@ -1034,7 +1034,7 @@ def test_dist_git_push_release_failed_issue_creation_disabled( ) ) - for model in propose_downstream_target_models: + for _ in propose_downstream_target_models: flexmock(AbstractSyncReleaseHandler).should_receive( "run_for_target" ).and_return("some error") diff --git a/tests/unit/test_allowlist.py b/tests/unit/test_allowlist.py index 2481924ca..e24354b83 100644 --- a/tests/unit/test_allowlist.py +++ b/tests/unit/test_allowlist.py @@ -631,7 +631,9 @@ def test_check_and_report( git_project = GithubProject("the-repo", GithubService(), "the-namespace") for event, is_valid, resolved_through in events: - flexmock(GithubProject, can_merge_pr=lambda username: is_valid) + flexmock( + GithubProject, can_merge_pr=lambda username, is_valid=is_valid: is_valid + ) flexmock(event, project=git_project).should_receive("get_dict").and_return(None) # needs to be included when running only `test_allowlist` # flexmock(event).should_receive("db_project_object").and_return( diff --git a/tests_openshift/conftest.py b/tests_openshift/conftest.py index 327847c42..f9e07145b 100644 --- a/tests_openshift/conftest.py +++ b/tests_openshift/conftest.py @@ -2257,7 +2257,7 @@ def few_runs(pr_project_event_model, different_pr_project_event_model): test_run_group=runs[-1].test_run_group, ) - for i, target in enumerate((SampleValues.target, SampleValues.different_target)): + for _i, target in enumerate((SampleValues.target, SampleValues.different_target)): TFTTestRunTargetModel.create( pipeline_id=SampleValues.pipeline_id, web_url=SampleValues.testing_farm_url, diff --git a/tests_openshift/database/test_models.py b/tests_openshift/database/test_models.py index 1d95f133e..8c9c70f47 100644 --- a/tests_openshift/database/test_models.py +++ b/tests_openshift/database/test_models.py @@ -823,7 +823,7 @@ def test_project_token_model(clean_before_and_after): def test_merged_runs(clean_before_and_after, few_runs): - for i, run_id in enumerate(few_runs, 1): + for _i, run_id in enumerate(few_runs, 1): merged_run = PipelineModel.get_merged_run(run_id) srpm_build_id = merged_run.srpm_build_id From 74e7e571a2beef55b7abfdab49cbce6e33c5c1c7 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Tue, 22 Oct 2024 13:27:14 +0200 Subject: [PATCH 03/13] ci(ruff): enable flake8-comprehensions Signed-off-by: Matej Focko --- packit_service/models.py | 50 +++++++++++------------ packit_service/service/api/runs.py | 2 +- packit_service/service/api/usage.py | 8 ++-- packit_service/worker/handlers/distgit.py | 28 ++++++------- packit_service/worker/mixin.py | 14 +++---- packit_service/worker/parser.py | 8 ++-- ruff.toml | 2 +- tests/unit/test_bodhi_update_checks.py | 20 ++++----- tests/unit/test_reporting.py | 2 +- 9 files changed, 67 insertions(+), 67 deletions(-) diff --git a/packit_service/models.py b/packit_service/models.py index bda98941c..dd8a31944 100644 --- a/packit_service/models.py +++ b/packit_service/models.py @@ -4123,73 +4123,73 @@ def get_usage_data(datetime_from=None, datetime_to=None, top=10) -> dict: # "type[ProjectAndEventsConnector]" has no attribute "__tablename__" continue - jobs[job_model.__tablename__] = dict( - job_runs=GitProjectModel.get_job_usage_numbers_count_all_project_events( + jobs[job_model.__tablename__] = { + "job_runs": GitProjectModel.get_job_usage_numbers_count_all_project_events( datetime_from=datetime_from, datetime_to=datetime_to, job_result_model=job_model, ), - top_projects_by_job_runs=GitProjectModel.get_job_usage_numbers_all_project_events( + "top_projects_by_job_runs": GitProjectModel.get_job_usage_numbers_all_project_events( datetime_from=datetime_from, datetime_to=datetime_to, top=top, job_result_model=job_model, ), - ) + } jobs[job_model.__tablename__]["per_event"] = { - project_event_type.value: dict( - job_runs=GitProjectModel.get_job_usage_numbers_count( + project_event_type.value: { + "job_runs": GitProjectModel.get_job_usage_numbers_count( datetime_from=datetime_from, datetime_to=datetime_to, job_result_model=job_model, project_event_type=project_event_type, ), - top_projects_by_job_runs=GitProjectModel.get_job_usage_numbers( + "top_projects_by_job_runs": GitProjectModel.get_job_usage_numbers( datetime_from=datetime_from, datetime_to=datetime_to, top=top, job_result_model=job_model, project_event_type=project_event_type, ), - ) + } for project_event_type in ProjectEventModelType } - return dict( - all_projects=dict( - project_count=GitProjectModel.get_project_count(), - instances=GitProjectModel.get_instance_numbers(), - ), - active_projects=dict( - project_count=GitProjectModel.get_active_projects_count( + return { + "all_projects": { + "project_count": GitProjectModel.get_project_count(), + "instances": GitProjectModel.get_instance_numbers(), + }, + "active_projects": { + "project_count": GitProjectModel.get_active_projects_count( datetime_from=datetime_from, datetime_to=datetime_to, ), - top_projects_by_events_handled=GitProjectModel.get_active_projects_usage_numbers( + "top_projects_by_events_handled": GitProjectModel.get_active_projects_usage_numbers( datetime_from=datetime_from, datetime_to=datetime_to, top=top ), - instances=GitProjectModel.get_instance_numbers_for_active_projects( + "instances": GitProjectModel.get_instance_numbers_for_active_projects( datetime_from=datetime_from, datetime_to=datetime_to ), - ), - events={ - project_event_type.value: dict( - events_handled=GitProjectModel.get_project_event_usage_count( + }, + "events": { + project_event_type.value: { + "events_handled": GitProjectModel.get_project_event_usage_count( datetime_from=datetime_from, datetime_to=datetime_to, project_event_type=project_event_type, ), - top_projects=GitProjectModel.get_project_event_usage_numbers( + "top_projects": GitProjectModel.get_project_event_usage_numbers( datetime_from=datetime_from, datetime_to=datetime_to, top=top, project_event_type=project_event_type, ), - ) + } for project_event_type in ProjectEventModelType }, - jobs=jobs, - ) + "jobs": jobs, + } @cached(cache=TTLCache(maxsize=1, ttl=(60 * 60 * 24))) diff --git a/packit_service/service/api/runs.py b/packit_service/service/api/runs.py index df5cf5dad..a331e54cb 100644 --- a/packit_service/service/api/runs.py +++ b/packit_service/service/api/runs.py @@ -63,7 +63,7 @@ def _add_vm_image_build(run: VMImageBuildTargetModel, response_dict: Dict): def flatten_and_remove_none(ids): - return filter(None, map(lambda arr: arr[0], ids)) + return filter(None, (arr[0] for arr in ids)) def process_runs(runs): diff --git a/packit_service/service/api/usage.py b/packit_service/service/api/usage.py index 3411cd3b0..dc17d1ab3 100644 --- a/packit_service/service/api/usage.py +++ b/packit_service/service/api/usage.py @@ -317,10 +317,10 @@ def get_project_usage_data(project: str, datetime_from=None, datetime_to=None): for project_event_type in ProjectEventModelType } - return dict( - events_handled=events_handled, - jobs=jobs, - ) + return { + "events_handled": events_handled, + "jobs": jobs, + } def get_result_dictionary( diff --git a/packit_service/worker/handlers/distgit.py b/packit_service/worker/handlers/distgit.py index 12c6b3304..c851f59d7 100644 --- a/packit_service/worker/handlers/distgit.py +++ b/packit_service/worker/handlers/distgit.py @@ -249,25 +249,25 @@ def sync_branch( is_pull_from_upstream_job = ( self.sync_release_job_type == SyncReleaseJobType.pull_from_upstream ) - kwargs = dict( - dist_git_branch=branch, - create_pr=True, - local_pr_branch_suffix=branch_suffix, - use_downstream_specfile=is_pull_from_upstream_job, - sync_default_files=not is_pull_from_upstream_job, - add_pr_instructions=True, - resolved_bugs=self.get_resolved_bugs(), - release_monitoring_project_id=self.data.event_dict.get( + kwargs = { + "dist_git_branch": branch, + "create_pr": True, + "local_pr_branch_suffix": branch_suffix, + "use_downstream_specfile": is_pull_from_upstream_job, + "sync_default_files": not is_pull_from_upstream_job, + "add_pr_instructions": True, + "resolved_bugs": self.get_resolved_bugs(), + "release_monitoring_project_id": self.data.event_dict.get( "anitya_project_id" ), - sync_acls=True, - pr_description_footer=DistgitAnnouncement.get_announcement(), + "sync_acls": True, + "pr_description_footer": DistgitAnnouncement.get_announcement(), # [TODO] Remove for CentOS support once it gets refined - add_new_sources=self.package_config.pkg_tool in (None, "fedpkg"), - fast_forward_merge_branches=self.helper.get_fast_forward_merge_branches_for( + "add_new_sources": self.package_config.pkg_tool in (None, "fedpkg"), + "fast_forward_merge_branches": self.helper.get_fast_forward_merge_branches_for( branch ), - ) + } if not self.packit_api.non_git_upstream: kwargs["tag"] = self.tag elif version := self.data.event_dict.get("version"): diff --git a/packit_service/worker/mixin.py b/packit_service/worker/mixin.py index b1dbc0e39..ab389b600 100644 --- a/packit_service/worker/mixin.py +++ b/packit_service/worker/mixin.py @@ -238,13 +238,13 @@ def local_project(self) -> LocalProject: Path(self.service_config.command_handler_work_dir) / SANDCASTLE_LOCAL_PROJECT_DIR ) - kwargs = dict( - repo_name=CALCULATE, - full_name=CALCULATE, - namespace=CALCULATE, - working_dir=working_dir, - git_repo=CALCULATE, - ) + kwargs = { + "repo_name": CALCULATE, + "full_name": CALCULATE, + "namespace": CALCULATE, + "working_dir": working_dir, + "git_repo": CALCULATE, + } if self.project: kwargs["git_project"] = self.project diff --git a/packit_service/worker/parser.py b/packit_service/worker/parser.py index 13c9cfb34..d34cf9827 100644 --- a/packit_service/worker/parser.py +++ b/packit_service/worker/parser.py @@ -137,9 +137,9 @@ def parse_event( logger.warning("No event to process!") return None - for response in map( - lambda parser: parser(event), - ( + for response in ( + parser(event) + for parser in ( Parser.parse_pr_event, Parser.parse_pull_request_comment_event, Parser.parse_issue_comment_event, @@ -166,7 +166,7 @@ def parse_event( Parser.parse_anitya_version_update_event, Parser.parse_openscanhub_task_finished_event, Parser.parse_openscanhub_task_started_event, - ), + ) ): if response: return response diff --git a/ruff.toml b/ruff.toml index 5c5cd9e2d..c9b771f2d 100644 --- a/ruff.toml +++ b/ruff.toml @@ -1,6 +1,6 @@ select = [ "B", # flake8-bugbear - # "C4", # flake8-comprehensions + "C4", # flake8-comprehensions # "COM", # flake8-commas # "E", # pycodestyle Error # "F", # Pyflakes diff --git a/tests/unit/test_bodhi_update_checks.py b/tests/unit/test_bodhi_update_checks.py index 92fff5fe5..9c46d7eda 100644 --- a/tests/unit/test_bodhi_update_checks.py +++ b/tests/unit/test_bodhi_update_checks.py @@ -69,11 +69,11 @@ def test_check_has_author_write_access( ) }, ) - data = dict( - event_type=event_type, - actor="happy-packit-user", - pr_id=123, - ) + data = { + "event_type": event_type, + "actor": "happy-packit-user", + "pr_id": 123, + } project = flexmock( has_write_access=lambda user: has_write_access, repo="playground-for-pencils", @@ -132,11 +132,11 @@ def test_check_is_author_a_packager(author_name: str, is_packager: bool, result: ) }, ) - data = dict( - event_type="PullRequestCommentPagureEvent", - actor=author_name, - pr_id=123, - ) + data = { + "event_type": "PullRequestCommentPagureEvent", + "actor": author_name, + "pr_id": 123, + } project = flexmock( repo="playground-for-pencils", ) diff --git a/tests/unit/test_reporting.py b/tests/unit/test_reporting.py index e55f89b14..6d895e367 100644 --- a/tests/unit/test_reporting.py +++ b/tests/unit/test_reporting.py @@ -271,7 +271,7 @@ def test_set_status_github_check( "https://api.packit.dev/build/111/logs", CommitStatus.success, GithubAPIException, - dict(), + {}, StatusReporterGithubStatuses, id="GitHub PR", ), From a7f9a2fad2a0046e69ac20a0549e7598b1e87a9e Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Tue, 22 Oct 2024 13:42:37 +0200 Subject: [PATCH 04/13] ci(ruff): enable flake8-commas Signed-off-by: Matej Focko --- ...a2d8_srpmbuildmodel_copr_related_fields.py | 6 +- ...89d27a_add_task_accepted_time_field_to_.py | 3 +- ...dd_packages_config_to_projecteventmodel.py | 3 +- ...add_onboarded_check_in_gitprojectmodel_.py | 3 +- alembic/versions/320c791746f0_more_indexes.py | 36 +- ...15ae_add_skipped_status_report_to_sync_.py | 6 +- .../4033221ea50c_rename_jobtriggermodel.py | 4 +- alembic/versions/4292b00185bf_whitelist.py | 5 +- ...40cb19_add_koji_build_scratch_attribute.py | 3 +- .../482dc393678a_save_identifier_in_tf_run.py | 3 +- ..._add_sidetag_groups_and_sidetags_tables.py | 10 +- ...4a51b961c28_bodhi_updates_from_sidetags.py | 3 +- .../68ce6a306b30_add_koji_build_groups.py | 58 +- .../6c9e1df74fa0_save_propose_downstream.py | 3 +- ...44197d206_rename_whitelist_to_allowlist.py | 4 +- ...ba80_add_explicit_mapping_of_tf_to_copr.py | 13 +- .../70dcb6140e11_store_build_datetime.py | 9 +- ..._link_srpmbuildmodel_to_jobtriggermodel.py | 9 +- .../73a28911901f_improve_db_model_naming.py | 16 +- ...4fa_add_sync_release_pull_request_table.py | 30 +- ...a13238bfa4_add_models_for_bodhi_updates.py | 9 +- ...9841c3f8ba8_adjust_kojibuildtargetmodel.py | 7 +- .../9fe0e970880f_add_copr_build_groups.py | 50 +- ...400be4_store_submit_time_of_srpm_builds.py | 3 +- ...c282_add_times_for_bodhi_update_targets.py | 10 +- alembic/versions/a5c06aa9ef30_add_runmodel.py | 62 ++- .../a619bd414ff0_add_build_status_enum.py | 6 +- .../a9c49475e9c7_add_testing_farm_groups.py | 38 +- ...19025_move_commit_sha_to_project_events.py | 79 ++- alembic/versions/c6250555a36c_.py | 13 +- ..._add_tables_for_triggers_koji_and_tests.py | 54 +- ...7ff1c6_add_package_name_to_the_pipeline.py | 5 +- ...c1beda6749e_add_tables_for_task_results.py | 3 +- .../e05e1b04de87_add_koji_build_tags.py | 8 +- .../e907a93de3ef_add_vm_image_builds_table.py | 12 +- ...ull_from_upstream_releated_adjustements.py | 52 +- files/scripts/allowlist.py | 4 +- files/scripts/db-cleanup.py | 6 +- files/scripts/webhook.py | 10 +- packit_service/config.py | 35 +- packit_service/models.py | 459 +++++++++++----- packit_service/sentry_integration.py | 2 +- packit_service/service/api/bodhi_updates.py | 3 +- packit_service/service/api/copr_builds.py | 5 +- packit_service/service/api/koji_builds.py | 6 +- packit_service/service/api/parsers.py | 6 +- packit_service/service/api/projects.py | 44 +- .../service/api/propose_downstream.py | 7 +- .../service/api/pull_from_upstream.py | 7 +- packit_service/service/api/runs.py | 20 +- packit_service/service/api/testing_farm.py | 6 +- packit_service/service/api/usage.py | 23 +- packit_service/service/api/utils.py | 2 +- packit_service/service/api/webhooks.py | 18 +- packit_service/service/app.py | 2 +- packit_service/service/tasks.py | 32 +- packit_service/utils.py | 9 +- packit_service/worker/allowlist.py | 35 +- packit_service/worker/checker/bodhi.py | 13 +- packit_service/worker/checker/copr.py | 22 +- packit_service/worker/checker/distgit.py | 21 +- packit_service/worker/checker/forges.py | 5 +- packit_service/worker/checker/helper.py | 9 +- packit_service/worker/checker/testing_farm.py | 19 +- packit_service/worker/database.py | 13 +- packit_service/worker/events/comment.py | 4 +- packit_service/worker/events/copr.py | 12 +- packit_service/worker/events/event.py | 20 +- packit_service/worker/events/github.py | 6 +- packit_service/worker/events/koji.py | 4 +- packit_service/worker/events/new_hotness.py | 4 +- packit_service/worker/events/pagure.py | 17 +- packit_service/worker/events/testing_farm.py | 4 +- packit_service/worker/handlers/abstract.py | 18 +- packit_service/worker/handlers/bodhi.py | 40 +- packit_service/worker/handlers/copr.py | 28 +- packit_service/worker/handlers/distgit.py | 81 +-- packit_service/worker/handlers/forges.py | 31 +- packit_service/worker/handlers/koji.py | 91 ++-- packit_service/worker/handlers/mixin.py | 40 +- .../worker/handlers/testing_farm.py | 27 +- packit_service/worker/handlers/vm_image.py | 4 +- packit_service/worker/helpers/sidetag.py | 16 +- .../sync_release/propose_downstream.py | 2 +- .../sync_release/pull_from_upstream.py | 2 +- packit_service/worker/helpers/testing_farm.py | 102 ++-- packit_service/worker/jobs.py | 108 ++-- packit_service/worker/mixin.py | 7 +- packit_service/worker/monitoring.py | 7 +- packit_service/worker/parser.py | 98 ++-- packit_service/worker/reporting/enums.py | 3 +- .../worker/reporting/reporters/base.py | 15 +- .../worker/reporting/reporters/github.py | 20 +- .../worker/reporting/reporters/gitlab.py | 18 +- .../worker/reporting/reporters/pagure.py | 11 +- packit_service/worker/reporting/utils.py | 7 +- packit_service/worker/result.py | 8 +- packit_service/worker/tasks.py | 72 ++- ruff.toml | 2 +- tests/conftest.py | 33 +- tests/integration/test_babysit.py | 156 +++--- tests/integration/test_bodhi_update.py | 237 ++++---- tests/integration/test_check_rerun.py | 155 +++--- tests/integration/test_database.py | 4 +- tests/integration/test_dg_commit.py | 207 ++++--- .../test_github_fas_verification.py | 56 +- tests/integration/test_handler.py | 35 +- tests/integration/test_installation.py | 43 +- tests/integration/test_issue_comment.py | 76 +-- tests/integration/test_koji_build.py | 46 +- tests/integration/test_listen_to_fedmsg.py | 498 ++++++++--------- tests/integration/test_new_hotness_update.py | 58 +- tests/integration/test_pr_comment.py | 504 ++++++++++-------- tests/integration/test_release_event.py | 149 +++--- tests/integration/test_vm_image_build.py | 29 +- tests/unit/conftest.py | 13 +- tests/unit/events/conftest.py | 4 +- tests/unit/events/test_anitya.py | 18 +- tests/unit/events/test_copr.py | 24 +- tests/unit/events/test_github.py | 142 ++--- tests/unit/events/test_gitlab.py | 34 +- tests/unit/events/test_koji.py | 46 +- tests/unit/events/test_pagure.py | 6 +- tests/unit/events/test_testing_farm.py | 34 +- tests/unit/test_allowlist.py | 102 ++-- tests/unit/test_babysit_vm_image.py | 42 +- tests/unit/test_bodhi_update_checks.py | 18 +- tests/unit/test_bodhi_update_error_msgs.py | 22 +- tests/unit/test_build_helper.py | 452 +++++++++------- tests/unit/test_checkers.py | 107 ++-- tests/unit/test_config.py | 38 +- tests/unit/test_copr_build.py | 147 ++--- tests/unit/test_distgit.py | 28 +- tests/unit/test_handler_mixin.py | 12 +- tests/unit/test_handler_vm_image.py | 20 +- tests/unit/test_jobs.py | 295 +++++----- tests/unit/test_koji_build.py | 85 +-- tests/unit/test_mixin.py | 4 +- tests/unit/test_models.py | 6 +- tests/unit/test_propose_downstream.py | 19 +- tests/unit/test_reporting.py | 80 ++- tests/unit/test_scan.py | 92 ++++ tests/unit/test_srpm_logs.py | 13 +- tests/unit/test_steve.py | 35 +- tests/unit/test_tasks.py | 2 +- tests/unit/test_testing_farm.py | 205 +++---- tests/unit/test_views.py | 18 +- tests/unit/test_webhooks.py | 24 +- tests_openshift/conftest.py | 160 +++--- tests_openshift/database/test_allowlist.py | 12 +- tests_openshift/database/test_events.py | 80 ++- tests_openshift/database/test_models.py | 216 +++++--- tests_openshift/database/test_tasks.py | 30 +- .../openshift_integration/test_copr.py | 6 +- .../openshift_integration/test_pkgtool.py | 35 +- tests_openshift/service/test_api.py | 141 +++-- 156 files changed, 4589 insertions(+), 2974 deletions(-) create mode 100644 tests/unit/test_scan.py diff --git a/alembic/versions/0ad4d1c2a2d8_srpmbuildmodel_copr_related_fields.py b/alembic/versions/0ad4d1c2a2d8_srpmbuildmodel_copr_related_fields.py index 5365653cd..0c7673118 100644 --- a/alembic/versions/0ad4d1c2a2d8_srpmbuildmodel_copr_related_fields.py +++ b/alembic/versions/0ad4d1c2a2d8_srpmbuildmodel_copr_related_fields.py @@ -203,10 +203,12 @@ class SRPMBuildModel(ProjectAndEventsConnector, Base): def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.add_column( - "srpm_builds", sa.Column("build_finished_time", sa.DateTime(), nullable=True) + "srpm_builds", + sa.Column("build_finished_time", sa.DateTime(), nullable=True), ) op.add_column( - "srpm_builds", sa.Column("build_start_time", sa.DateTime(), nullable=True) + "srpm_builds", + sa.Column("build_start_time", sa.DateTime(), nullable=True), ) op.add_column("srpm_builds", sa.Column("commit_sha", sa.String(), nullable=True)) op.add_column("srpm_builds", sa.Column("copr_build_id", sa.String(), nullable=True)) diff --git a/alembic/versions/28beb389d27a_add_task_accepted_time_field_to_.py b/alembic/versions/28beb389d27a_add_task_accepted_time_field_to_.py index d1c4ae0f5..357cf79c5 100644 --- a/alembic/versions/28beb389d27a_add_task_accepted_time_field_to_.py +++ b/alembic/versions/28beb389d27a_add_task_accepted_time_field_to_.py @@ -20,7 +20,8 @@ def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.add_column( - "copr_builds", sa.Column("task_accepted_time", sa.DateTime(), nullable=True) + "copr_builds", + sa.Column("task_accepted_time", sa.DateTime(), nullable=True), ) # ### end Alembic commands ### diff --git a/alembic/versions/2ad985cecd79_add_packages_config_to_projecteventmodel.py b/alembic/versions/2ad985cecd79_add_packages_config_to_projecteventmodel.py index 11deb7a5f..ca1e6a933 100644 --- a/alembic/versions/2ad985cecd79_add_packages_config_to_projecteventmodel.py +++ b/alembic/versions/2ad985cecd79_add_packages_config_to_projecteventmodel.py @@ -20,7 +20,8 @@ def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.add_column( - "project_events", sa.Column("packages_config", sa.JSON(), nullable=True) + "project_events", + sa.Column("packages_config", sa.JSON(), nullable=True), ) # ### end Alembic commands ### diff --git a/alembic/versions/31111f804dec_add_onboarded_check_in_gitprojectmodel_.py b/alembic/versions/31111f804dec_add_onboarded_check_in_gitprojectmodel_.py index 4b3eb88da..ca6f88270 100644 --- a/alembic/versions/31111f804dec_add_onboarded_check_in_gitprojectmodel_.py +++ b/alembic/versions/31111f804dec_add_onboarded_check_in_gitprojectmodel_.py @@ -20,7 +20,8 @@ def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.add_column( - "git_projects", sa.Column("onboarded_downstream", sa.Boolean(), nullable=True) + "git_projects", + sa.Column("onboarded_downstream", sa.Boolean(), nullable=True), ) # ### end Alembic commands ### diff --git a/alembic/versions/320c791746f0_more_indexes.py b/alembic/versions/320c791746f0_more_indexes.py index 6084c0906..f5a6c0325 100644 --- a/alembic/versions/320c791746f0_more_indexes.py +++ b/alembic/versions/320c791746f0_more_indexes.py @@ -26,17 +26,29 @@ def upgrade(): unique=False, ) op.create_index( - op.f("ix_git_branches_project_id"), "git_branches", ["project_id"], unique=False + op.f("ix_git_branches_project_id"), + "git_branches", + ["project_id"], + unique=False, ) op.drop_column("git_projects", "https_url") op.create_index( - op.f("ix_job_triggers_trigger_id"), "job_triggers", ["trigger_id"], unique=False + op.f("ix_job_triggers_trigger_id"), + "job_triggers", + ["trigger_id"], + unique=False, ) op.create_index( - op.f("ix_pipelines_copr_build_id"), "pipelines", ["copr_build_id"], unique=False + op.f("ix_pipelines_copr_build_id"), + "pipelines", + ["copr_build_id"], + unique=False, ) op.create_index( - op.f("ix_pipelines_koji_build_id"), "pipelines", ["koji_build_id"], unique=False + op.f("ix_pipelines_koji_build_id"), + "pipelines", + ["koji_build_id"], + unique=False, ) op.create_index( op.f("ix_pipelines_propose_downstream_run_id"), @@ -45,10 +57,16 @@ def upgrade(): unique=False, ) op.create_index( - op.f("ix_pipelines_srpm_build_id"), "pipelines", ["srpm_build_id"], unique=False + op.f("ix_pipelines_srpm_build_id"), + "pipelines", + ["srpm_build_id"], + unique=False, ) op.create_index( - op.f("ix_pipelines_test_run_id"), "pipelines", ["test_run_id"], unique=False + op.f("ix_pipelines_test_run_id"), + "pipelines", + ["test_run_id"], + unique=False, ) op.create_index( op.f("ix_project_issues_project_id"), @@ -79,7 +97,8 @@ def downgrade(): op.drop_index(op.f("ix_pipelines_test_run_id"), table_name="pipelines") op.drop_index(op.f("ix_pipelines_srpm_build_id"), table_name="pipelines") op.drop_index( - op.f("ix_pipelines_propose_downstream_run_id"), table_name="pipelines" + op.f("ix_pipelines_propose_downstream_run_id"), + table_name="pipelines", ) op.drop_index(op.f("ix_pipelines_koji_build_id"), table_name="pipelines") op.drop_index(op.f("ix_pipelines_copr_build_id"), table_name="pipelines") @@ -90,6 +109,7 @@ def downgrade(): ) op.drop_index(op.f("ix_git_branches_project_id"), table_name="git_branches") op.drop_index( - op.f("ix_copr_build_targets_commit_sha"), table_name="copr_build_targets" + op.f("ix_copr_build_targets_commit_sha"), + table_name="copr_build_targets", ) # ### end Alembic commands ### diff --git a/alembic/versions/3de8647515ae_add_skipped_status_report_to_sync_.py b/alembic/versions/3de8647515ae_add_skipped_status_report_to_sync_.py index 2d452c08d..c4e7f82d7 100644 --- a/alembic/versions/3de8647515ae_add_skipped_status_report_to_sync_.py +++ b/alembic/versions/3de8647515ae_add_skipped_status_report_to_sync_.py @@ -22,14 +22,14 @@ def upgrade(): def downgrade(): op.execute( - "ALTER TYPE syncreleasetargetstatus RENAME TO syncreleasetargetstatus_old" + "ALTER TYPE syncreleasetargetstatus RENAME TO syncreleasetargetstatus_old", ) op.execute( "CREATE TYPE syncreleasetargetstatus AS ENUM " - "('queued', 'running', 'error', 'retry', 'submitted')" + "('queued', 'running', 'error', 'retry', 'submitted')", ) op.execute( "ALTER TABLE sync_release_run_targets " - "ALTER COLUMN status TYPE syncreleasetargetstatus USING status::syncreleasetargetstatus" + "ALTER COLUMN status TYPE syncreleasetargetstatus USING status::syncreleasetargetstatus", ) op.execute("DROP TYPE syncreleasetargetstatus_old") diff --git a/alembic/versions/4033221ea50c_rename_jobtriggermodel.py b/alembic/versions/4033221ea50c_rename_jobtriggermodel.py index c0dc8fc83..1e00f83d0 100644 --- a/alembic/versions/4033221ea50c_rename_jobtriggermodel.py +++ b/alembic/versions/4033221ea50c_rename_jobtriggermodel.py @@ -23,7 +23,7 @@ def upgrade(): op.execute("ALTER SEQUENCE job_triggers_id_seq RENAME TO project_events_id_seq") op.execute("ALTER INDEX job_triggers_pkey RENAME TO project_events_pkey") op.execute( - "ALTER INDEX ix_job_triggers_trigger_id RENAME TO ix_project_events_event_id" + "ALTER INDEX ix_job_triggers_trigger_id RENAME TO ix_project_events_event_id", ) op.alter_column("pipelines", "job_trigger_id", new_column_name="project_event_id") @@ -45,7 +45,7 @@ def downgrade(): op.execute("ALTER SEQUENCE project_events_id_seq RENAME TO job_triggers_id_seq") op.execute("ALTER INDEX project_events_pkey RENAME TO job_triggers_pkey") op.execute( - "ALTER INDEX ix_project_events_event_id RENAME TO ix_job_triggers_trigger_id" + "ALTER INDEX ix_project_events_event_id RENAME TO ix_job_triggers_trigger_id", ) op.alter_column("pipelines", "project_event_id", new_column_name="job_trigger_id") diff --git a/alembic/versions/4292b00185bf_whitelist.py b/alembic/versions/4292b00185bf_whitelist.py index dcc883757..6b3ad0151 100644 --- a/alembic/versions/4292b00185bf_whitelist.py +++ b/alembic/versions/4292b00185bf_whitelist.py @@ -36,7 +36,10 @@ def upgrade(): sa.PrimaryKeyConstraint("id"), ) op.create_index( - op.f("ix_whitelist_account_name"), "whitelist", ["account_name"], unique=False + op.f("ix_whitelist_account_name"), + "whitelist", + ["account_name"], + unique=False, ) # ### end Alembic commands ### diff --git a/alembic/versions/46b37040cb19_add_koji_build_scratch_attribute.py b/alembic/versions/46b37040cb19_add_koji_build_scratch_attribute.py index 059e382f9..e1b265d0d 100644 --- a/alembic/versions/46b37040cb19_add_koji_build_scratch_attribute.py +++ b/alembic/versions/46b37040cb19_add_koji_build_scratch_attribute.py @@ -76,7 +76,8 @@ def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.add_column( - "koji_build_targets", sa.Column("scratch", sa.Boolean(), nullable=True) + "koji_build_targets", + sa.Column("scratch", sa.Boolean(), nullable=True), ) # ### end Alembic commands ### diff --git a/alembic/versions/482dc393678a_save_identifier_in_tf_run.py b/alembic/versions/482dc393678a_save_identifier_in_tf_run.py index c3dd515e8..775484d62 100644 --- a/alembic/versions/482dc393678a_save_identifier_in_tf_run.py +++ b/alembic/versions/482dc393678a_save_identifier_in_tf_run.py @@ -20,7 +20,8 @@ def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.add_column( - "tft_test_run_targets", sa.Column("identifier", sa.String(), nullable=True) + "tft_test_run_targets", + sa.Column("identifier", sa.String(), nullable=True), ) # ### end Alembic commands ### diff --git a/alembic/versions/487a77980f7e_add_sidetag_groups_and_sidetags_tables.py b/alembic/versions/487a77980f7e_add_sidetag_groups_and_sidetags_tables.py index cbc916fb6..0a8ac0d3d 100644 --- a/alembic/versions/487a77980f7e_add_sidetag_groups_and_sidetags_tables.py +++ b/alembic/versions/487a77980f7e_add_sidetag_groups_and_sidetags_tables.py @@ -26,7 +26,10 @@ def upgrade(): sa.PrimaryKeyConstraint("id"), ) op.create_index( - op.f("ix_sidetag_groups_name"), "sidetag_groups", ["name"], unique=True + op.f("ix_sidetag_groups_name"), + "sidetag_groups", + ["name"], + unique=True, ) op.create_table( "sidetags", @@ -41,7 +44,10 @@ def upgrade(): sa.PrimaryKeyConstraint("id"), ) op.create_index( - op.f("ix_sidetags_koji_name"), "sidetags", ["koji_name"], unique=True + op.f("ix_sidetags_koji_name"), + "sidetags", + ["koji_name"], + unique=True, ) # ### end Alembic commands ### diff --git a/alembic/versions/64a51b961c28_bodhi_updates_from_sidetags.py b/alembic/versions/64a51b961c28_bodhi_updates_from_sidetags.py index b3b512c73..62e2f80f0 100644 --- a/alembic/versions/64a51b961c28_bodhi_updates_from_sidetags.py +++ b/alembic/versions/64a51b961c28_bodhi_updates_from_sidetags.py @@ -22,7 +22,8 @@ def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.alter_column("bodhi_update_targets", "koji_nvr", new_column_name="koji_nvrs") op.add_column( - "bodhi_update_targets", sa.Column("sidetag", sa.String(), nullable=True) + "bodhi_update_targets", + sa.Column("sidetag", sa.String(), nullable=True), ) # ### end Alembic commands ### diff --git a/alembic/versions/68ce6a306b30_add_koji_build_groups.py b/alembic/versions/68ce6a306b30_add_koji_build_groups.py index b97078b95..b3afff9bb 100644 --- a/alembic/versions/68ce6a306b30_add_koji_build_groups.py +++ b/alembic/versions/68ce6a306b30_add_koji_build_groups.py @@ -82,21 +82,29 @@ class PipelineModel(Base): srpm_build_id = Column(Integer, ForeignKey("srpm_builds.id"), index=True) srpm_build = relationship("SRPMBuildModel", back_populates="runs") copr_build_group_id = Column( - Integer, ForeignKey("copr_build_groups.id"), index=True + Integer, + ForeignKey("copr_build_groups.id"), + index=True, ) copr_build_group = relationship("CoprBuildGroupModel", back_populates="runs") koji_build_group_id = Column( - Integer, ForeignKey("koji_build_groups.id"), index=True + Integer, + ForeignKey("koji_build_groups.id"), + index=True, ) koji_build_group = relationship("KojiBuildGroupModel", back_populates="runs") koji_build_id = Column(Integer, ForeignKey("koji_build_targets.id"), index=True) koji_build = relationship("KojiBuildTargetModel", back_populates="runs") test_run_group_id = Column( - Integer, ForeignKey("tft_test_run_groups.id"), index=True + Integer, + ForeignKey("tft_test_run_groups.id"), + index=True, ) test_run_group = relationship("TFTTestRunGroupModel", back_populates="runs") sync_release_run_id = Column( - Integer, ForeignKey("sync_release_runs.id"), index=True + Integer, + ForeignKey("sync_release_runs.id"), + index=True, ) sync_release_run = relationship("SyncReleaseModel", back_populates="runs") @@ -136,7 +144,8 @@ class TFTTestRunTargetModel(ProjectAndEventsConnector, Base): ) group_of_targets = relationship( - "TFTTestRunGroupModel", back_populates="tft_test_run_targets" + "TFTTestRunGroupModel", + back_populates="tft_test_run_targets", ) @@ -193,7 +202,8 @@ class CoprBuildTargetModel(ProjectAndEventsConnector, Base): copr_build_group_id = Column(Integer, ForeignKey("copr_build_groups.id")) group_of_targets = relationship( - "CoprBuildGroupModel", back_populates="copr_build_targets" + "CoprBuildGroupModel", + back_populates="copr_build_targets", ) @@ -247,7 +257,8 @@ class KojiBuildTargetModel(ProjectAndEventsConnector, Base): koji_build_group_id = Column(Integer, ForeignKey("koji_build_groups.id")) group_of_targets = relationship( - "KojiBuildGroupModel", back_populates="koji_build_targets" + "KojiBuildGroupModel", + back_populates="koji_build_targets", ) runs = relationship("PipelineModel", back_populates="koji_build") @@ -273,7 +284,8 @@ class SyncReleaseTargetModel(ProjectAndEventsConnector, Base): sync_release_id = Column(Integer, ForeignKey("sync_release_runs.id")) sync_release = relationship( - "SyncReleaseModel", back_populates="sync_release_targets" + "SyncReleaseModel", + back_populates="sync_release_targets", ) @@ -294,12 +306,14 @@ class SyncReleaseModel(ProjectAndEventsConnector, Base): status = Column(Enum(SyncReleaseStatus)) submitted_time = Column(DateTime, default=datetime.utcnow) job_type = Column( - Enum(SyncReleaseJobType), default=SyncReleaseJobType.propose_downstream + Enum(SyncReleaseJobType), + default=SyncReleaseJobType.propose_downstream, ) runs = relationship("PipelineModel", back_populates="sync_release_run") sync_release_targets = relationship( - "SyncReleaseTargetModel", back_populates="sync_release" + "SyncReleaseTargetModel", + back_populates="sync_release", ) @@ -316,7 +330,8 @@ class TFTTestRunGroupModel(ProjectAndEventsConnector, GroupModel, Base): runs = relationship("PipelineModel", back_populates="test_run_group") tft_test_run_targets = relationship( - "TFTTestRunTargetModel", back_populates="group_of_targets" + "TFTTestRunTargetModel", + back_populates="group_of_targets", ) @property @@ -331,7 +346,8 @@ class CoprBuildGroupModel(ProjectAndEventsConnector, GroupModel, Base): runs = relationship("PipelineModel", back_populates="copr_build_group") copr_build_targets = relationship( - "CoprBuildTargetModel", back_populates="group_of_targets" + "CoprBuildTargetModel", + back_populates="group_of_targets", ) @property @@ -346,7 +362,8 @@ class KojiBuildGroupModel(ProjectAndEventsConnector, GroupModel, Base): runs = relationship("PipelineModel", back_populates="koji_build_group") koji_build_targets = relationship( - "KojiBuildTargetModel", back_populates="group_of_targets" + "KojiBuildTargetModel", + back_populates="group_of_targets", ) @property @@ -375,10 +392,15 @@ def upgrade(): ["id"], ) op.add_column( - "pipelines", sa.Column("koji_build_group_id", sa.Integer(), nullable=True) + "pipelines", + sa.Column("koji_build_group_id", sa.Integer(), nullable=True), ) op.create_foreign_key( - None, "pipelines", "koji_build_groups", ["koji_build_group_id"], ["id"] + None, + "pipelines", + "koji_build_groups", + ["koji_build_group_id"], + ["id"], ) # Group by the same SRPM @@ -430,7 +452,8 @@ def downgrade(): # Split the groups back, this may not fully produce the same thing. for group in session.query(KojiBuildGroupModel): for pipeline, koji_build in itertools.zip_longest( - group.runs, group.koji_build_targets + group.runs, + group.koji_build_targets, ): if not pipeline: # Not enough pipelines, create a new one @@ -441,7 +464,8 @@ def downgrade(): session.add(pipeline) op.drop_constraint( - "koji_build_targets_koji_build_group_id_fkey", "koji_build_targets" + "koji_build_targets_koji_build_group_id_fkey", + "koji_build_targets", ) op.drop_column("koji_build_targets", "koji_build_group_id") op.drop_constraint("pipelines_koji_build_group_id_fkey", "pipelines") diff --git a/alembic/versions/6c9e1df74fa0_save_propose_downstream.py b/alembic/versions/6c9e1df74fa0_save_propose_downstream.py index bb8763168..2c1113a98 100644 --- a/alembic/versions/6c9e1df74fa0_save_propose_downstream.py +++ b/alembic/versions/6c9e1df74fa0_save_propose_downstream.py @@ -64,7 +64,8 @@ def upgrade(): sa.PrimaryKeyConstraint("id"), ) op.add_column( - "pipelines", sa.Column("propose_downstream_run_id", sa.Integer(), nullable=True) + "pipelines", + sa.Column("propose_downstream_run_id", sa.Integer(), nullable=True), ) op.create_foreign_key( None, diff --git a/alembic/versions/70444197d206_rename_whitelist_to_allowlist.py b/alembic/versions/70444197d206_rename_whitelist_to_allowlist.py index 6dd5c4d97..14496b903 100644 --- a/alembic/versions/70444197d206_rename_whitelist_to_allowlist.py +++ b/alembic/versions/70444197d206_rename_whitelist_to_allowlist.py @@ -21,7 +21,7 @@ def upgrade(): op.execute("ALTER SEQUENCE whitelist_id_seq RENAME TO allowlist_id_seq") op.execute("ALTER INDEX whitelist_pkey RENAME TO allowlist_pkey") op.execute( - "ALTER INDEX ix_whitelist_account_name RENAME TO ix_allowlist_account_name" + "ALTER INDEX ix_whitelist_account_name RENAME TO ix_allowlist_account_name", ) op.execute("ALTER TYPE whiteliststatus RENAME TO allowliststatus") # ### end Alembic commands ### @@ -33,7 +33,7 @@ def downgrade(): op.execute("ALTER SEQUENCE allowlist_id_seq RENAME TO whitelist_id_seq") op.execute("ALTER INDEX allowlist_pkey RENAME TO whitelist_pkey") op.execute( - "ALTER INDEX ix_allowlist_account_name RENAME TO ix_whitelist_account_name" + "ALTER INDEX ix_allowlist_account_name RENAME TO ix_whitelist_account_name", ) op.execute("ALTER TYPE allowliststatus RENAME TO whiteliststatus") # ### end Alembic commands ### diff --git a/alembic/versions/70c369f7ba80_add_explicit_mapping_of_tf_to_copr.py b/alembic/versions/70c369f7ba80_add_explicit_mapping_of_tf_to_copr.py index 578114180..24edef3c1 100644 --- a/alembic/versions/70c369f7ba80_add_explicit_mapping_of_tf_to_copr.py +++ b/alembic/versions/70c369f7ba80_add_explicit_mapping_of_tf_to_copr.py @@ -84,7 +84,9 @@ class PipelineModel(Base): test_run_id = Column(Integer, ForeignKey("tft_test_run_targets.id"), index=True) test_run = relationship("TFTTestRunTargetModel", back_populates="runs") sync_release_run_id = Column( - Integer, ForeignKey("sync_release_runs.id"), index=True + Integer, + ForeignKey("sync_release_runs.id"), + index=True, ) sync_release_run = relationship("SyncReleaseModel", back_populates="runs") @@ -251,7 +253,8 @@ class SyncReleaseTargetModel(ProjectAndEventsConnector, Base): sync_release_id = Column(Integer, ForeignKey("sync_release_runs.id")) sync_release = relationship( - "SyncReleaseModel", back_populates="sync_release_targets" + "SyncReleaseModel", + back_populates="sync_release_targets", ) @@ -272,12 +275,14 @@ class SyncReleaseModel(ProjectAndEventsConnector, Base): status = Column(Enum(SyncReleaseStatus)) submitted_time = Column(DateTime, default=datetime.utcnow) job_type = Column( - Enum(SyncReleaseJobType), default=SyncReleaseJobType.propose_downstream + Enum(SyncReleaseJobType), + default=SyncReleaseJobType.propose_downstream, ) runs = relationship("PipelineModel", back_populates="sync_release_run") sync_release_targets = relationship( - "SyncReleaseTargetModel", back_populates="sync_release" + "SyncReleaseTargetModel", + back_populates="sync_release", ) diff --git a/alembic/versions/70dcb6140e11_store_build_datetime.py b/alembic/versions/70dcb6140e11_store_build_datetime.py index 072d1518a..f750804ab 100644 --- a/alembic/versions/70dcb6140e11_store_build_datetime.py +++ b/alembic/versions/70dcb6140e11_store_build_datetime.py @@ -20,13 +20,16 @@ def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.add_column( - "copr_builds", sa.Column("build_finished_time", sa.DateTime(), nullable=True) + "copr_builds", + sa.Column("build_finished_time", sa.DateTime(), nullable=True), ) op.add_column( - "copr_builds", sa.Column("build_start_time", sa.DateTime(), nullable=True) + "copr_builds", + sa.Column("build_start_time", sa.DateTime(), nullable=True), ) op.add_column( - "copr_builds", sa.Column("build_submitted_time", sa.DateTime(), nullable=True) + "copr_builds", + sa.Column("build_submitted_time", sa.DateTime(), nullable=True), ) # ### end Alembic commands ### diff --git a/alembic/versions/726cb0f70c6d_link_srpmbuildmodel_to_jobtriggermodel.py b/alembic/versions/726cb0f70c6d_link_srpmbuildmodel_to_jobtriggermodel.py index d95318d34..5eff7a69b 100644 --- a/alembic/versions/726cb0f70c6d_link_srpmbuildmodel_to_jobtriggermodel.py +++ b/alembic/versions/726cb0f70c6d_link_srpmbuildmodel_to_jobtriggermodel.py @@ -185,10 +185,15 @@ def upgrade(): # Start schema migration op.add_column( - "srpm_builds", sa.Column("job_trigger_id", sa.Integer(), nullable=True) + "srpm_builds", + sa.Column("job_trigger_id", sa.Integer(), nullable=True), ) op.create_foreign_key( - None, "srpm_builds", "build_triggers", ["job_trigger_id"], ["id"] + None, + "srpm_builds", + "build_triggers", + ["job_trigger_id"], + ["id"], ) # End schema migration diff --git a/alembic/versions/73a28911901f_improve_db_model_naming.py b/alembic/versions/73a28911901f_improve_db_model_naming.py index c5c21852b..601d20cd3 100644 --- a/alembic/versions/73a28911901f_improve_db_model_naming.py +++ b/alembic/versions/73a28911901f_improve_db_model_naming.py @@ -29,23 +29,23 @@ def upgrade(): op.execute("ALTER SEQUENCE copr_builds_id_seq RENAME TO copr_build_targets_id_seq") op.execute("ALTER INDEX copr_builds_pkey RENAME TO copr_build_targets_pkey") op.execute( - "ALTER INDEX ix_copr_builds_build_id RENAME TO ix_copr_build_targets_build_id" + "ALTER INDEX ix_copr_builds_build_id RENAME TO ix_copr_build_targets_build_id", ) op.rename_table("koji_builds", "koji_build_targets") op.execute("ALTER SEQUENCE koji_builds_id_seq RENAME TO koji_build_targets_id_seq") op.execute("ALTER INDEX koji_builds_pkey RENAME TO koji_build_targets_pkey") op.execute( - "ALTER INDEX ix_koji_builds_build_id RENAME TO ix_koji_build_targets_build_id" + "ALTER INDEX ix_koji_builds_build_id RENAME TO ix_koji_build_targets_build_id", ) op.rename_table("tft_test_runs", "tft_test_run_targets") op.execute( - "ALTER SEQUENCE tft_test_runs_id_seq RENAME TO tft_test_run_targets_id_seq" + "ALTER SEQUENCE tft_test_runs_id_seq RENAME TO tft_test_run_targets_id_seq", ) op.execute("ALTER INDEX tft_test_runs_pkey RENAME TO tft_test_run_targets_pkey") op.execute( - "ALTER INDEX ix_tft_test_runs_pipeline_id RENAME TO ix_tft_test_run_targets_pipeline_id" + "ALTER INDEX ix_tft_test_runs_pipeline_id RENAME TO ix_tft_test_run_targets_pipeline_id", ) @@ -63,21 +63,21 @@ def downgrade(): op.execute("ALTER SEQUENCE copr_build_targets_id_seq RENAME TO copr_builds_id_seq") op.execute("ALTER INDEX copr_build_targets_pkey RENAME TO copr_builds_pkey") op.execute( - "ALTER INDEX ix_copr_build_targets_build_id RENAME TO ix_copr_builds_build_id" + "ALTER INDEX ix_copr_build_targets_build_id RENAME TO ix_copr_builds_build_id", ) op.rename_table("koji_build_targets", "koji_builds") op.execute("ALTER SEQUENCE koji_build_targets_id_seq RENAME TO koji_builds_id_seq") op.execute("ALTER INDEX koji_build_targets_pkey RENAME TO koji_builds_pkey") op.execute( - "ALTER INDEX ix_koji_build_targets_build_id RENAME TO ix_koji_builds_build_id" + "ALTER INDEX ix_koji_build_targets_build_id RENAME TO ix_koji_builds_build_id", ) op.rename_table("tft_test_run_targets", "tft_test_runs") op.execute( - "ALTER SEQUENCE tft_test_run_targets_id_seq RENAME TO tft_test_runs_id_seq" + "ALTER SEQUENCE tft_test_run_targets_id_seq RENAME TO tft_test_runs_id_seq", ) op.execute("ALTER INDEX tft_test_run_targets_pkey RENAME TO tft_test_runs_pkey") op.execute( - "ALTER INDEX ix_tft_test_run_targets_pipeline_id RENAME TO ix_tft_test_runs_pipeline_id" + "ALTER INDEX ix_tft_test_run_targets_pipeline_id RENAME TO ix_tft_test_runs_pipeline_id", ) diff --git a/alembic/versions/7d2b9fb924fa_add_sync_release_pull_request_table.py b/alembic/versions/7d2b9fb924fa_add_sync_release_pull_request_table.py index 01c88572a..b939d89f5 100644 --- a/alembic/versions/7d2b9fb924fa_add_sync_release_pull_request_table.py +++ b/alembic/versions/7d2b9fb924fa_add_sync_release_pull_request_table.py @@ -40,7 +40,8 @@ class SyncReleaseTargetModel(Base): downstream_pr_id = Column(Integer, ForeignKey("sync_release_pull_request.id")) pull_request = relationship( - "SyncReleasePullRequestModel", back_populates="sync_release_targets" + "SyncReleasePullRequestModel", + back_populates="sync_release_targets", ) @@ -50,19 +51,26 @@ class GitProjectModel(Base): namespace = Column(String, index=True) repo_name = Column(String, index=True) sync_release_pull_requests = relationship( - "SyncReleasePullRequestModel", back_populates="project" + "SyncReleasePullRequestModel", + back_populates="project", ) project_url = Column(String) instance_url = Column(String, nullable=False) @classmethod def get_or_create( - cls, namespace: str, repo_name: str, project_url: str, session: sa.orm.Session + cls, + namespace: str, + repo_name: str, + project_url: str, + session: sa.orm.Session, ) -> "GitProjectModel": project = ( session.query(GitProjectModel) .filter_by( - namespace=namespace, repo_name=repo_name, project_url=project_url + namespace=namespace, + repo_name=repo_name, + project_url=project_url, ) .first() ) @@ -83,10 +91,12 @@ class SyncReleasePullRequestModel(Base): pr_id = Column(Integer, index=True) project_id = Column(Integer, ForeignKey("git_projects.id"), index=True) project = relationship( - "GitProjectModel", back_populates="sync_release_pull_requests" + "GitProjectModel", + back_populates="sync_release_pull_requests", ) sync_release_targets = relationship( - "SyncReleaseTargetModel", back_populates="pull_request" + "SyncReleaseTargetModel", + back_populates="pull_request", ) @classmethod @@ -174,13 +184,17 @@ def upgrade(): (url.rfind("rpms/") + 5) : url.rfind("/pull-request") # noqa[203] ] pull_request = SyncReleasePullRequestModel.get_or_create( - pr_id, namespace, repo, project_url, session + pr_id, + namespace, + repo, + project_url, + session, ) sync_release.pull_request = pull_request session.add(pull_request) except Exception as e: print( - f"Error creating SyncReleasePullRequestModel during migration {e}" + f"Error creating SyncReleasePullRequestModel during migration {e}", ) diff --git a/alembic/versions/8ba13238bfa4_add_models_for_bodhi_updates.py b/alembic/versions/8ba13238bfa4_add_models_for_bodhi_updates.py index 9932fe6df..d5d792d3c 100644 --- a/alembic/versions/8ba13238bfa4_add_models_for_bodhi_updates.py +++ b/alembic/versions/8ba13238bfa4_add_models_for_bodhi_updates.py @@ -42,7 +42,8 @@ def upgrade(): sa.PrimaryKeyConstraint("id"), ) op.add_column( - "pipelines", sa.Column("bodhi_update_group_id", sa.Integer(), nullable=True) + "pipelines", + sa.Column("bodhi_update_group_id", sa.Integer(), nullable=True), ) op.create_index( op.f("ix_pipelines_bodhi_update_group_id"), @@ -51,7 +52,11 @@ def upgrade(): unique=False, ) op.create_foreign_key( - None, "pipelines", "bodhi_update_groups", ["bodhi_update_group_id"], ["id"] + None, + "pipelines", + "bodhi_update_groups", + ["bodhi_update_group_id"], + ["id"], ) # ### end Alembic commands ### diff --git a/alembic/versions/99841c3f8ba8_adjust_kojibuildtargetmodel.py b/alembic/versions/99841c3f8ba8_adjust_kojibuildtargetmodel.py index 2d01b7265..766901cd2 100644 --- a/alembic/versions/99841c3f8ba8_adjust_kojibuildtargetmodel.py +++ b/alembic/versions/99841c3f8ba8_adjust_kojibuildtargetmodel.py @@ -20,10 +20,11 @@ def upgrade(): op.alter_column("koji_build_targets", "build_id", new_column_name="task_id") op.execute( - "ALTER INDEX ix_koji_build_targets_build_id RENAME TO ix_koji_build_targets_task_id" + "ALTER INDEX ix_koji_build_targets_build_id RENAME TO ix_koji_build_targets_task_id", ) op.add_column( - "koji_build_targets", sa.Column("build_logs_urls", sa.JSON(), nullable=True) + "koji_build_targets", + sa.Column("build_logs_urls", sa.JSON(), nullable=True), ) # we can drop this, the logs URLs pointed to invalid URLs op.drop_column("koji_build_targets", "build_logs_url") @@ -32,7 +33,7 @@ def upgrade(): def downgrade(): op.alter_column("koji_build_targets", "task_id", new_column_name="build_id") op.execute( - "ALTER INDEX ix_koji_build_targets_task_id RENAME TO ix_koji_build_targets_build_id" + "ALTER INDEX ix_koji_build_targets_task_id RENAME TO ix_koji_build_targets_build_id", ) op.add_column( "koji_build_targets", diff --git a/alembic/versions/9fe0e970880f_add_copr_build_groups.py b/alembic/versions/9fe0e970880f_add_copr_build_groups.py index 06c6631ce..e14f9a2f0 100644 --- a/alembic/versions/9fe0e970880f_add_copr_build_groups.py +++ b/alembic/versions/9fe0e970880f_add_copr_build_groups.py @@ -84,17 +84,23 @@ class PipelineModel(Base): copr_build_id = Column(Integer, ForeignKey("copr_build_targets.id"), index=True) copr_build = relationship("CoprBuildTargetModel", back_populates="runs") copr_build_group_id = Column( - Integer, ForeignKey("copr_build_groups.id"), index=True + Integer, + ForeignKey("copr_build_groups.id"), + index=True, ) copr_build_group = relationship("CoprBuildGroupModel", back_populates="runs") koji_build_id = Column(Integer, ForeignKey("koji_build_targets.id"), index=True) koji_build = relationship("KojiBuildTargetModel", back_populates="runs") test_run_group_id = Column( - Integer, ForeignKey("tft_test_run_groups.id"), index=True + Integer, + ForeignKey("tft_test_run_groups.id"), + index=True, ) test_run_group = relationship("TFTTestRunGroupModel", back_populates="runs") sync_release_run_id = Column( - Integer, ForeignKey("sync_release_runs.id"), index=True + Integer, + ForeignKey("sync_release_runs.id"), + index=True, ) sync_release_run = relationship("SyncReleaseModel", back_populates="runs") @@ -134,7 +140,8 @@ class TFTTestRunTargetModel(ProjectAndEventsConnector, Base): ) group_of_targets = relationship( - "TFTTestRunGroupModel", back_populates="tft_test_run_targets" + "TFTTestRunGroupModel", + back_populates="tft_test_run_targets", ) @@ -191,7 +198,8 @@ class CoprBuildTargetModel(ProjectAndEventsConnector, Base): copr_build_group_id = Column(Integer, ForeignKey("copr_build_groups.id")) group_of_targets = relationship( - "CoprBuildGroupModel", back_populates="copr_build_targets" + "CoprBuildGroupModel", + back_populates="copr_build_targets", ) runs = relationship("PipelineModel", back_populates="copr_build") @@ -268,7 +276,8 @@ class SyncReleaseTargetModel(ProjectAndEventsConnector, Base): sync_release_id = Column(Integer, ForeignKey("sync_release_runs.id")) sync_release = relationship( - "SyncReleaseModel", back_populates="sync_release_targets" + "SyncReleaseModel", + back_populates="sync_release_targets", ) @@ -289,12 +298,14 @@ class SyncReleaseModel(ProjectAndEventsConnector, Base): status = Column(Enum(SyncReleaseStatus)) submitted_time = Column(DateTime, default=datetime.utcnow) job_type = Column( - Enum(SyncReleaseJobType), default=SyncReleaseJobType.propose_downstream + Enum(SyncReleaseJobType), + default=SyncReleaseJobType.propose_downstream, ) runs = relationship("PipelineModel", back_populates="sync_release_run") sync_release_targets = relationship( - "SyncReleaseTargetModel", back_populates="sync_release" + "SyncReleaseTargetModel", + back_populates="sync_release", ) @@ -311,7 +322,8 @@ class TFTTestRunGroupModel(ProjectAndEventsConnector, GroupModel, Base): runs = relationship("PipelineModel", back_populates="test_run_group") tft_test_run_targets = relationship( - "TFTTestRunTargetModel", back_populates="group_of_targets" + "TFTTestRunTargetModel", + back_populates="group_of_targets", ) @property @@ -326,7 +338,8 @@ class CoprBuildGroupModel(ProjectAndEventsConnector, GroupModel, Base): runs = relationship("PipelineModel", back_populates="copr_build_group") copr_build_targets = relationship( - "CoprBuildTargetModel", back_populates="group_of_targets" + "CoprBuildTargetModel", + back_populates="group_of_targets", ) @property @@ -355,10 +368,15 @@ def upgrade(): ["id"], ) op.add_column( - "pipelines", sa.Column("copr_build_group_id", sa.Integer(), nullable=True) + "pipelines", + sa.Column("copr_build_group_id", sa.Integer(), nullable=True), ) op.create_foreign_key( - None, "pipelines", "copr_build_groups", ["copr_build_group_id"], ["id"] + None, + "pipelines", + "copr_build_groups", + ["copr_build_group_id"], + ["id"], ) groups = collections.defaultdict(list) @@ -378,7 +396,7 @@ def upgrade(): # Link the pipeline to groups # TODO: should we merge the groups? This would result in deletion and possibly some mess for pipeline in session.query(PipelineModel).filter( - PipelineModel.copr_build_id == copr_model_id + PipelineModel.copr_build_id == copr_model_id, ): pipeline.copr_build_group = group session.add(pipeline) @@ -406,7 +424,8 @@ def downgrade(): # Split the groups back, this may not fully produce the same thing. for group in session.query(CoprBuildGroupModel): for pipeline, copr_build in itertools.zip_longest( - group.runs, group.copr_build_targets + group.runs, + group.copr_build_targets, ): if not pipeline: # Not enough pipelines, create a new one @@ -417,7 +436,8 @@ def downgrade(): session.add(pipeline) op.drop_constraint( - "copr_build_targets_copr_build_group_id_fkey", "copr_build_targets" + "copr_build_targets_copr_build_group_id_fkey", + "copr_build_targets", ) op.drop_column("copr_build_targets", "copr_build_group_id") op.drop_constraint("pipelines_copr_build_group_id_fkey", "pipelines") diff --git a/alembic/versions/a0e48c400be4_store_submit_time_of_srpm_builds.py b/alembic/versions/a0e48c400be4_store_submit_time_of_srpm_builds.py index c73264a48..26921e7ef 100644 --- a/alembic/versions/a0e48c400be4_store_submit_time_of_srpm_builds.py +++ b/alembic/versions/a0e48c400be4_store_submit_time_of_srpm_builds.py @@ -19,7 +19,8 @@ def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.add_column( - "srpm_builds", sa.Column("build_submitted_time", sa.DateTime(), nullable=True) + "srpm_builds", + sa.Column("build_submitted_time", sa.DateTime(), nullable=True), ) # ### end Alembic commands ### diff --git a/alembic/versions/a3a17014c282_add_times_for_bodhi_update_targets.py b/alembic/versions/a3a17014c282_add_times_for_bodhi_update_targets.py index cc1ecb092..4b9851d60 100644 --- a/alembic/versions/a3a17014c282_add_times_for_bodhi_update_targets.py +++ b/alembic/versions/a3a17014c282_add_times_for_bodhi_update_targets.py @@ -51,7 +51,9 @@ class PipelineModel(Base): id = Column(Integer, primary_key=True) # our database PK datetime = Column(DateTime, default=datetime.utcnow) bodhi_update_group_id = Column( - Integer, ForeignKey("bodhi_update_groups.id"), index=True + Integer, + ForeignKey("bodhi_update_groups.id"), + index=True, ) bodhi_update_group = relationship("BodhiUpdateGroupModel", back_populates="runs") @@ -63,7 +65,8 @@ class BodhiUpdateGroupModel(ProjectAndEventsConnector, GroupModel, Base): runs = relationship("PipelineModel", back_populates="bodhi_update_group") bodhi_update_targets = relationship( - "BodhiUpdateTargetModel", back_populates="group_of_targets" + "BodhiUpdateTargetModel", + back_populates="group_of_targets", ) @@ -81,7 +84,8 @@ class BodhiUpdateTargetModel(GroupAndTargetModelConnector, Base): bodhi_update_group_id = Column(Integer, ForeignKey("bodhi_update_groups.id")) group_of_targets = relationship( - "BodhiUpdateGroupModel", back_populates="bodhi_update_targets" + "BodhiUpdateGroupModel", + back_populates="bodhi_update_targets", ) diff --git a/alembic/versions/a5c06aa9ef30_add_runmodel.py b/alembic/versions/a5c06aa9ef30_add_runmodel.py index 02581b587..54e5a5a91 100644 --- a/alembic/versions/a5c06aa9ef30_add_runmodel.py +++ b/alembic/versions/a5c06aa9ef30_add_runmodel.py @@ -278,7 +278,8 @@ def upgrade(): sa.PrimaryKeyConstraint("id"), ) op.add_column( - "tft_test_runs", sa.Column("submitted_time", sa.DateTime(), nullable=True) + "tft_test_runs", + sa.Column("submitted_time", sa.DateTime(), nullable=True), ) # Start data migration @@ -306,7 +307,8 @@ def upgrade(): for copr_build in job_trigger_model.copr_builds: if copr_build.srpm_build: print( - f"Fixing SRPM matching: {copr_build.srpm_build} -> {copr_build.job_trigger}" + "Fixing SRPM matching:", + f"{copr_build.srpm_build} -> {copr_build.job_trigger}", ) fixed_srpm_matching_from_copr_build += 1 copr_build.srpm_build.job_trigger = job_trigger_model @@ -318,7 +320,8 @@ def upgrade(): for koji_build in job_trigger_model.koji_builds: if koji_build.srpm_build: print( - f"Fixing SRPM matching: {koji_build.srpm_build} -> {koji_build.job_trigger}" + "Fixing SRPM matching:", + f"{koji_build.srpm_build} -> {koji_build.job_trigger}", ) fixed_srpm_matching_from_koji_build += 1 koji_build.srpm_build.job_trigger = job_trigger_model @@ -369,7 +372,7 @@ def upgrade(): run_models_successful = 0 for job_trigger_model in session.query(JobTriggerModel).order_by( - JobTriggerModel.id + JobTriggerModel.id, ): copr_builds = defaultdict(list) for copr_build in job_trigger_model.copr_builds: @@ -395,7 +398,7 @@ def upgrade(): if len(build.runs) != 1: PackitException( f"Build {build} does not have exactly one run:\n" - f"{build.runs}" + f"{build.runs}", ) test_runs_attached += 1 build.runs[-1].test_run = test @@ -414,12 +417,12 @@ def upgrade(): print( f"job_trigger_model={job_trigger_model}\n" f"runs={job_trigger_model.runs}\n" - f"srpm_builds={job_trigger_model.srpm_builds}" + f"srpm_builds={job_trigger_model.srpm_builds}", ) if not job_trigger_model.copr_builds and not job_trigger_model.koji_builds: for srpm_build in job_trigger_model.srpm_builds: print( - f"Creating RunModel for SRPMBuildModel without any build: {srpm_build}" + f"Creating RunModel for SRPMBuildModel without any build: {srpm_build}", ) all_run_models += 1 srpms_without_build += 1 @@ -434,7 +437,7 @@ def upgrade(): for srpm_build in session.query(SRPMBuildModel).all(): if not srpm_build.runs: print( - f"Creating RunModel for SRPMBuildModel without any RunModel: {srpm_build}" + f"Creating RunModel for SRPMBuildModel without any RunModel: {srpm_build}", ) all_run_models += 1 srpms_without_run += 1 @@ -450,34 +453,35 @@ def upgrade(): print(f"SRPM models without any run (RunModel created): {srpms_without_run}") print( f"SRPM models removed because of no connection to any job trigger: " - f"{srpm_builds_removed_for_no_job_trigger}" + f"{srpm_builds_removed_for_no_job_trigger}", ) print("================================") print(f"All Copr builds: {all_copr_builds}") print( - f"Copr builds deleted for no SRPM for trigger: {deleted_copr_builds_for_no_srpm}" + f"Copr builds deleted for no SRPM for trigger: {deleted_copr_builds_for_no_srpm}", ) print(f"Copr builds deleted for no SRPM set: {copr_builds_without_srpm}") print( f"Fixed SRPM matching to trigger model from Copr build: " - f"{fixed_srpm_matching_from_copr_build}" + f"{fixed_srpm_matching_from_copr_build}", ) print("================================") print(f"All Koji builds: {all_koji_builds}") print( - f"Koji builds deleted for no SRPM for trigger: {deleted_koji_builds_for_no_srpm}" + f"Koji builds deleted for no SRPM for trigger: {deleted_koji_builds_for_no_srpm}", ) print(f"Koji builds deleted for no SRPM set: {koji_builds_without_srpm}") print( f"Fixed SRPM matching to trigger model from Koji build: " - f"{fixed_srpm_matching_from_koji_build}" + f"{fixed_srpm_matching_from_koji_build}", ) print("================================") print(f"All Test runs: {all_test_runs}") print(f"Attached correctly to build: {test_runs_attached}") print(f"All Run models: {all_run_models}") print( - f"Run models with different number of tests and builds: {number_of_builds_and_tests_differ}" + "Run models with different number of tests and builds:", + f"{number_of_builds_and_tests_differ}", ) print(f"Run models with test run correctly set: {run_models_successful}") print("================================") @@ -491,14 +495,14 @@ def upgrade(): srpm_builds = {run.srpm_build for run in copr_build.runs} if len(srpm_builds) != 1: raise PackitException( - f"More SRPM builds for one copr_build {copr_build}:\n{srpm_builds}" + f"More SRPM builds for one copr_build {copr_build}:\n{srpm_builds}", ) for koji_build in session.query(KojiBuildModel).all(): srpm_builds = {run.srpm_build for run in koji_build.runs} if len(srpm_builds) != 1: raise PackitException( - f"More SRPM builds for one koji_build {koji_build}:\n{srpm_builds}" + f"More SRPM builds for one koji_build {koji_build}:\n{srpm_builds}", ) run_model_count = 0 @@ -506,7 +510,7 @@ def upgrade(): run_model_count += 1 if not run_model.srpm_build: raise PackitException( - f"Run model does not have SRPM build set: {run_model}" + f"Run model does not have SRPM build set: {run_model}", ) session.commit() @@ -514,27 +518,39 @@ def upgrade(): # Remove direct connections: op.drop_constraint( - "copr_builds_job_trigger_id_fkey", "copr_builds", type_="foreignkey" + "copr_builds_job_trigger_id_fkey", + "copr_builds", + type_="foreignkey", ) op.drop_constraint( - "copr_builds_srpm_build_id_fkey1", "copr_builds", type_="foreignkey" + "copr_builds_srpm_build_id_fkey1", + "copr_builds", + type_="foreignkey", ) op.drop_column("copr_builds", "job_trigger_id") op.drop_column("copr_builds", "srpm_build_id") op.drop_constraint( - "koji_builds_srpm_build_id_fkey", "koji_builds", type_="foreignkey" + "koji_builds_srpm_build_id_fkey", + "koji_builds", + type_="foreignkey", ) op.drop_constraint( - "koji_builds_job_trigger_id_fkey", "koji_builds", type_="foreignkey" + "koji_builds_job_trigger_id_fkey", + "koji_builds", + type_="foreignkey", ) op.drop_column("koji_builds", "job_trigger_id") op.drop_column("koji_builds", "srpm_build_id") op.drop_constraint( - "srpm_builds_job_trigger_id_fkey", "srpm_builds", type_="foreignkey" + "srpm_builds_job_trigger_id_fkey", + "srpm_builds", + type_="foreignkey", ) op.drop_column("srpm_builds", "job_trigger_id") op.drop_constraint( - "tft_test_runs_job_trigger_id_fkey", "tft_test_runs", type_="foreignkey" + "tft_test_runs_job_trigger_id_fkey", + "tft_test_runs", + type_="foreignkey", ) op.drop_column("tft_test_runs", "job_trigger_id") diff --git a/alembic/versions/a619bd414ff0_add_build_status_enum.py b/alembic/versions/a619bd414ff0_add_build_status_enum.py index 34c160b5c..b6c9166c6 100644 --- a/alembic/versions/a619bd414ff0_add_build_status_enum.py +++ b/alembic/versions/a619bd414ff0_add_build_status_enum.py @@ -19,15 +19,15 @@ def upgrade(): op.execute( "CREATE TYPE buildstatus AS ENUM " - "('success', 'pending', 'failure', 'error', 'waiting_for_srpm')" + "('success', 'pending', 'failure', 'error', 'waiting_for_srpm')", ) op.execute( "ALTER TABLE copr_build_targets " - "ALTER COLUMN status TYPE buildstatus USING status::buildstatus" + "ALTER COLUMN status TYPE buildstatus USING status::buildstatus", ) op.execute( "ALTER TABLE srpm_builds " - "ALTER COLUMN status TYPE buildstatus USING status::buildstatus" + "ALTER COLUMN status TYPE buildstatus USING status::buildstatus", ) diff --git a/alembic/versions/a9c49475e9c7_add_testing_farm_groups.py b/alembic/versions/a9c49475e9c7_add_testing_farm_groups.py index 9e9cceb14..966a7f970 100644 --- a/alembic/versions/a9c49475e9c7_add_testing_farm_groups.py +++ b/alembic/versions/a9c49475e9c7_add_testing_farm_groups.py @@ -87,11 +87,15 @@ class PipelineModel(Base): test_run_id = Column(Integer, ForeignKey("tft_test_run_targets.id"), index=True) test_run = relationship("TFTTestRunTargetModel", back_populates="runs") test_run_group_id = Column( - Integer, ForeignKey("tft_test_run_groups.id"), index=True + Integer, + ForeignKey("tft_test_run_groups.id"), + index=True, ) test_run_group = relationship("TFTTestRunGroupModel", back_populates="runs") sync_release_run_id = Column( - Integer, ForeignKey("sync_release_runs.id"), index=True + Integer, + ForeignKey("sync_release_runs.id"), + index=True, ) sync_release_run = relationship("SyncReleaseModel", back_populates="runs") @@ -132,7 +136,8 @@ class TFTTestRunTargetModel(ProjectAndEventsConnector, Base): runs = relationship("PipelineModel", back_populates="test_run") group_of_targets = relationship( - "TFTTestRunGroupModel", back_populates="tft_test_run_targets" + "TFTTestRunGroupModel", + back_populates="tft_test_run_targets", ) @@ -262,7 +267,8 @@ class SyncReleaseTargetModel(ProjectAndEventsConnector, Base): sync_release_id = Column(Integer, ForeignKey("sync_release_runs.id")) sync_release = relationship( - "SyncReleaseModel", back_populates="sync_release_targets" + "SyncReleaseModel", + back_populates="sync_release_targets", ) @@ -283,12 +289,14 @@ class SyncReleaseModel(ProjectAndEventsConnector, Base): status = Column(Enum(SyncReleaseStatus)) submitted_time = Column(DateTime, default=datetime.utcnow) job_type = Column( - Enum(SyncReleaseJobType), default=SyncReleaseJobType.propose_downstream + Enum(SyncReleaseJobType), + default=SyncReleaseJobType.propose_downstream, ) runs = relationship("PipelineModel", back_populates="sync_release_run") sync_release_targets = relationship( - "SyncReleaseTargetModel", back_populates="sync_release" + "SyncReleaseTargetModel", + back_populates="sync_release", ) @@ -305,7 +313,8 @@ class TFTTestRunGroupModel(ProjectAndEventsConnector, GroupModel, Base): runs = relationship("PipelineModel", back_populates="test_run_group") tft_test_run_targets = relationship( - "TFTTestRunTargetModel", back_populates="group_of_targets" + "TFTTestRunTargetModel", + back_populates="group_of_targets", ) @property @@ -334,10 +343,15 @@ def upgrade(): ["id"], ) op.add_column( - "pipelines", sa.Column("test_run_group_id", sa.Integer(), nullable=True) + "pipelines", + sa.Column("test_run_group_id", sa.Integer(), nullable=True), ) op.create_foreign_key( - None, "pipelines", "tft_test_run_groups", ["test_run_group_id"], ["id"] + None, + "pipelines", + "tft_test_run_groups", + ["test_run_group_id"], + ["id"], ) # We group by the same SRPM. If there is no SRPM (testing without building), we just @@ -408,7 +422,8 @@ def downgrade(): # Split the groups back, this may not fully produce the same thing. for group in session.query(TFTTestRunGroupModel): for pipeline, test_run in itertools.zip_longest( - group.runs, group.tft_test_run_targets + group.runs, + group.tft_test_run_targets, ): if not pipeline: # Not enough pipelines, create a new one @@ -419,7 +434,8 @@ def downgrade(): session.add(pipeline) op.drop_constraint( - "tft_test_run_targets_tft_test_run_group_id_fkey", "tft_test_run_targets" + "tft_test_run_targets_tft_test_run_group_id_fkey", + "tft_test_run_targets", ) op.drop_column("tft_test_run_targets", "tft_test_run_group_id") op.drop_constraint("pipelines_test_run_group_id_fkey", "pipelines") diff --git a/alembic/versions/af00a7f19025_move_commit_sha_to_project_events.py b/alembic/versions/af00a7f19025_move_commit_sha_to_project_events.py index 0d5e36982..1b54be305 100644 --- a/alembic/versions/af00a7f19025_move_commit_sha_to_project_events.py +++ b/alembic/versions/af00a7f19025_move_commit_sha_to_project_events.py @@ -59,19 +59,27 @@ class PipelineModel(Base): srpm_build_id = Column(Integer, ForeignKey("srpm_builds.id"), index=True) srpm_build = relationship("SRPMBuildModel", back_populates="runs") copr_build_group_id = Column( - Integer, ForeignKey("copr_build_groups.id"), index=True + Integer, + ForeignKey("copr_build_groups.id"), + index=True, ) copr_build_group = relationship("CoprBuildGroupModel", back_populates="runs") koji_build_group_id = Column( - Integer, ForeignKey("koji_build_groups.id"), index=True + Integer, + ForeignKey("koji_build_groups.id"), + index=True, ) koji_build_group = relationship("KojiBuildGroupModel", back_populates="runs") vm_image_build_id = Column( - Integer, ForeignKey("vm_image_build_targets.id"), index=True + Integer, + ForeignKey("vm_image_build_targets.id"), + index=True, ) vm_image_build = relationship("VMImageBuildTargetModel", back_populates="runs") test_run_group_id = Column( - Integer, ForeignKey("tft_test_run_groups.id"), index=True + Integer, + ForeignKey("tft_test_run_groups.id"), + index=True, ) test_run_group = relationship("TFTTestRunGroupModel", back_populates="runs") @@ -88,7 +96,8 @@ class KojiBuildGroupModel(Base): id = Column(Integer, primary_key=True) runs = relationship("PipelineModel", back_populates="koji_build_group") koji_build_targets = relationship( - "KojiBuildTargetModel", back_populates="group_of_targets" + "KojiBuildTargetModel", + back_populates="group_of_targets", ) @@ -98,7 +107,8 @@ class KojiBuildTargetModel(Base): commit_sha = Column(String) koji_build_group_id = Column(Integer, ForeignKey("koji_build_groups.id")) group_of_targets = relationship( - "KojiBuildGroupModel", back_populates="koji_build_targets" + "KojiBuildGroupModel", + back_populates="koji_build_targets", ) @@ -107,7 +117,8 @@ class CoprBuildGroupModel(Base): id = Column(Integer, primary_key=True) runs = relationship("PipelineModel", back_populates="copr_build_group") copr_build_targets = relationship( - "CoprBuildTargetModel", back_populates="group_of_targets" + "CoprBuildTargetModel", + back_populates="group_of_targets", ) @@ -116,10 +127,13 @@ class CoprBuildTargetModel(Base): id = Column(Integer, primary_key=True) commit_sha = Column(String) copr_build_group_id = Column( - Integer, ForeignKey("copr_build_groups.id"), index=True + Integer, + ForeignKey("copr_build_groups.id"), + index=True, ) group_of_targets = relationship( - "CoprBuildGroupModel", back_populates="copr_build_targets" + "CoprBuildGroupModel", + back_populates="copr_build_targets", ) @@ -128,7 +142,8 @@ class TFTTestRunGroupModel(Base): id = Column(Integer, primary_key=True) runs = relationship("PipelineModel", back_populates="test_run_group") tft_test_run_targets = relationship( - "TFTTestRunTargetModel", back_populates="group_of_targets" + "TFTTestRunTargetModel", + back_populates="group_of_targets", ) @@ -138,7 +153,8 @@ class TFTTestRunTargetModel(Base): commit_sha = Column(String) tft_test_run_group_id = Column(Integer, ForeignKey("tft_test_run_groups.id")) group_of_targets = relationship( - "TFTTestRunGroupModel", back_populates="tft_test_run_targets" + "TFTTestRunGroupModel", + back_populates="tft_test_run_targets", ) @@ -175,14 +191,15 @@ def upgrade(): KojiBuildTargetModel.koji_build_group_id == KojiBuildGroupModel.id, ) .join( - PipelineModel, PipelineModel.koji_build_group_id == KojiBuildGroupModel.id + PipelineModel, + PipelineModel.koji_build_group_id == KojiBuildGroupModel.id, ) .all() ) rows.extend( session.query(PipelineModel.project_event_id, SRPMBuildModel.commit_sha) .join(SRPMBuildModel, SRPMBuildModel.id == PipelineModel.srpm_build_id) - .all() + .all(), ) rows.extend( session.query(PipelineModel.project_event_id, CoprBuildTargetModel.commit_sha) @@ -191,9 +208,10 @@ def upgrade(): CoprBuildTargetModel.copr_build_group_id == CoprBuildGroupModel.id, ) .join( - PipelineModel, PipelineModel.copr_build_group_id == CoprBuildGroupModel.id + PipelineModel, + PipelineModel.copr_build_group_id == CoprBuildGroupModel.id, ) - .all() + .all(), ) rows.extend( session.query(PipelineModel.project_event_id, TFTTestRunTargetModel.commit_sha) @@ -202,23 +220,24 @@ def upgrade(): TFTTestRunTargetModel.tft_test_run_group_id == TFTTestRunGroupModel.id, ) .join(PipelineModel, PipelineModel.test_run_group_id == TFTTestRunGroupModel.id) - .all() + .all(), ) rows.extend( session.query( - PipelineModel.project_event_id, VMImageBuildTargetModel.commit_sha + PipelineModel.project_event_id, + VMImageBuildTargetModel.commit_sha, ) .join( VMImageBuildTargetModel, VMImageBuildTargetModel.id == PipelineModel.vm_image_build_id, ) - .all() + .all(), ) for row in rows: bind.execute( update(ProjectEventModel) .where(ProjectEventModel.id == row[0]) - .values(commit_sha=row[1]) + .values(commit_sha=row[1]), ) op.drop_index("ix_copr_build_targets_commit_sha", table_name="copr_build_targets") @@ -227,7 +246,8 @@ def upgrade(): op.drop_column("srpm_builds", "commit_sha") op.drop_column("tft_test_run_targets", "commit_sha") op.drop_index( - "ix_vm_image_build_targets_commit_sha", table_name="vm_image_build_targets" + "ix_vm_image_build_targets_commit_sha", + table_name="vm_image_build_targets", ) op.drop_column("vm_image_build_targets", "commit_sha") # ### end Alembic commands ### @@ -278,7 +298,8 @@ def downgrade(): KojiBuildTargetModel.koji_build_group_id == KojiBuildGroupModel.id, ) .join( - PipelineModel, PipelineModel.koji_build_group_id == KojiBuildGroupModel.id + PipelineModel, + PipelineModel.koji_build_group_id == KojiBuildGroupModel.id, ) .join(ProjectEventModel, ProjectEventModel.id == PipelineModel.project_event_id) .all() @@ -287,7 +308,7 @@ def downgrade(): bind.execute( update(KojiBuildTargetModel) .where(KojiBuildTargetModel.id == row[0]) - .values(commit_sha=row[1]) + .values(commit_sha=row[1]), ) rows = ( session.query(SRPMBuildModel.id, ProjectEventModel.commit_sha) @@ -299,7 +320,7 @@ def downgrade(): bind.execute( update(SRPMBuildModel) .where(SRPMBuildModel.id == row[0]) - .values(commit_sha=row[1]) + .values(commit_sha=row[1]), ) rows = ( session.query(CoprBuildTargetModel.id, ProjectEventModel.commit_sha) @@ -308,7 +329,8 @@ def downgrade(): CoprBuildTargetModel.copr_build_group_id == CoprBuildGroupModel.id, ) .join( - PipelineModel, PipelineModel.copr_build_group_id == CoprBuildGroupModel.id + PipelineModel, + PipelineModel.copr_build_group_id == CoprBuildGroupModel.id, ) .join(ProjectEventModel, ProjectEventModel.id == PipelineModel.project_event_id) .all() @@ -317,7 +339,7 @@ def downgrade(): bind.execute( update(CoprBuildTargetModel) .where(CoprBuildTargetModel.id == row[0]) - .values(commit_sha=row[1]) + .values(commit_sha=row[1]), ) rows = ( session.query(TFTTestRunTargetModel.id, ProjectEventModel.commit_sha) @@ -333,12 +355,13 @@ def downgrade(): bind.execute( update(TFTTestRunTargetModel) .where(TFTTestRunTargetModel.id == row[0]) - .values(commit_sha=row[1]) + .values(commit_sha=row[1]), ) rows = ( session.query(VMImageBuildTargetModel.id, ProjectEventModel.commit_sha) .join( - PipelineModel, PipelineModel.vm_image_build_id == VMImageBuildTargetModel.id + PipelineModel, + PipelineModel.vm_image_build_id == VMImageBuildTargetModel.id, ) .join(ProjectEventModel, ProjectEventModel.id == PipelineModel.project_event_id) .all() @@ -347,7 +370,7 @@ def downgrade(): bind.execute( update(VMImageBuildTargetModel) .where(VMImageBuildTargetModel.id == row[0]) - .values(commit_sha=row[1]) + .values(commit_sha=row[1]), ) op.drop_index(op.f("ix_project_events_commit_sha"), table_name="project_events") diff --git a/alembic/versions/c6250555a36c_.py b/alembic/versions/c6250555a36c_.py index 87ffdabdb..5369d83f4 100644 --- a/alembic/versions/c6250555a36c_.py +++ b/alembic/versions/c6250555a36c_.py @@ -417,7 +417,10 @@ class JobTriggerUpgradeModel(Base): @classmethod def get_or_create( - cls, session: Session, type: JobTriggerModelType, trigger_id: int + cls, + session: Session, + type: JobTriggerModelType, + trigger_id: int, ) -> "JobTriggerUpgradeModel": trigger = ( session.query(JobTriggerUpgradeModel) @@ -471,7 +474,9 @@ def upgrade(): # our table TaskResultUpgradeModel.add_task_result( - session=session, task_id=task_id, task_result_dict=result + session=session, + task_id=task_id, + task_result_dict=result, ) # celery table add_task_to_celery_table( @@ -492,7 +497,9 @@ def upgrade(): status = data.get("status") logger.info(f"Adding account {account} into WhitelistModel") WhitelistUpgradeModel.add_account( - session=session, account_name=account, status=status + session=session, + account_name=account, + status=status, ) # installations diff --git a/alembic/versions/d90948124e46_add_tables_for_triggers_koji_and_tests.py b/alembic/versions/d90948124e46_add_tables_for_triggers_koji_and_tests.py index f991bdb3b..b5bc8f5a3 100644 --- a/alembic/versions/d90948124e46_add_tables_for_triggers_koji_and_tests.py +++ b/alembic/versions/d90948124e46_add_tables_for_triggers_koji_and_tests.py @@ -26,7 +26,7 @@ # Very hacky but I cannot solve the problem, that `requirements` is None. flexmock(config).should_receive("requirements").and_return( - flexmock(foreign_key_ddl=flexmock(enabled_for_config=lambda config: True)) + flexmock(foreign_key_ddl=flexmock(enabled_for_config=lambda config: True)), ) # https://github.com/python/mypy/issues/2477#issuecomment-313984522 ^_^ @@ -53,7 +53,10 @@ class GitProjectUpgradeModel(Base): @classmethod def get_or_create( - cls, namespace: str, repo_name: str, session: Session + cls, + namespace: str, + repo_name: str, + session: Session, ) -> "GitProjectUpgradeModel": project = ( session.query(GitProjectUpgradeModel) @@ -84,10 +87,16 @@ class PullRequestUpgradeModel(Base): @classmethod def get_or_create( - cls, pr_id: int, namespace: str, repo_name: str, session: Session + cls, + pr_id: int, + namespace: str, + repo_name: str, + session: Session, ) -> "PullRequestUpgradeModel": project = GitProjectUpgradeModel.get_or_create( - namespace=namespace, repo_name=repo_name, session=session + namespace=namespace, + repo_name=repo_name, + session=session, ) pr = ( session.query(PullRequestUpgradeModel) @@ -146,7 +155,10 @@ class JobTriggerUpgradeModel(Base): @classmethod def get_or_create( - cls, type: JobTriggerModelType, trigger_id: int, session: Session + cls, + type: JobTriggerModelType, + trigger_id: int, + session: Session, ) -> "JobTriggerUpgradeModel": trigger = ( session.query(JobTriggerUpgradeModel) @@ -227,7 +239,10 @@ def upgrade(): sa.PrimaryKeyConstraint("id"), ) op.create_index( - op.f("ix_koji_builds_build_id"), "koji_builds", ["build_id"], unique=False + op.f("ix_koji_builds_build_id"), + "koji_builds", + ["build_id"], + unique=False, ) op.create_table( "project_issues", @@ -241,7 +256,10 @@ def upgrade(): sa.PrimaryKeyConstraint("id"), ) op.create_index( - op.f("ix_project_issues_issue_id"), "project_issues", ["issue_id"], unique=False + op.f("ix_project_issues_issue_id"), + "project_issues", + ["issue_id"], + unique=False, ) op.create_table( "project_releases", @@ -264,7 +282,12 @@ def upgrade(): sa.Column( "status", sa.Enum( - "new", "passed", "failed", "error", "running", name="testingfarmresult" + "new", + "passed", + "failed", + "error", + "running", + name="testingfarmresult", ), nullable=True, ), @@ -284,11 +307,16 @@ def upgrade(): unique=False, ) op.add_column( - "copr_builds", sa.Column("job_trigger_id", sa.Integer(), nullable=True) + "copr_builds", + sa.Column("job_trigger_id", sa.Integer(), nullable=True), ) op.drop_constraint("copr_builds_pr_id_fkey1", "copr_builds", type_="foreignkey") op.create_foreign_key( - None, "copr_builds", "build_triggers", ["job_trigger_id"], ["id"] + None, + "copr_builds", + "build_triggers", + ["job_trigger_id"], + ["id"], ) # ### start of data migration, pause the alembic auto-generate ### @@ -321,7 +349,11 @@ def downgrade(): ) op.drop_constraint(None, "copr_builds", type_="foreignkey") op.create_foreign_key( - "copr_builds_pr_id_fkey1", "copr_builds", "pull_requests", ["pr_id"], ["id"] + "copr_builds_pr_id_fkey1", + "copr_builds", + "pull_requests", + ["pr_id"], + ["id"], ) op.drop_column("copr_builds", "job_trigger_id") op.drop_index(op.f("ix_tft_test_runs_pipeline_id"), table_name="tft_test_runs") diff --git a/alembic/versions/db64a37ff1c6_add_package_name_to_the_pipeline.py b/alembic/versions/db64a37ff1c6_add_package_name_to_the_pipeline.py index 7a2110135..6bb24f13e 100644 --- a/alembic/versions/db64a37ff1c6_add_package_name_to_the_pipeline.py +++ b/alembic/versions/db64a37ff1c6_add_package_name_to_the_pipeline.py @@ -21,7 +21,10 @@ def upgrade(): # ### commands auto generated by Alembic - please adjust! ### op.add_column("pipelines", sa.Column("package_name", sa.String(), nullable=True)) op.create_index( - op.f("ix_pipelines_package_name"), "pipelines", ["package_name"], unique=False + op.f("ix_pipelines_package_name"), + "pipelines", + ["package_name"], + unique=False, ) # ### end Alembic commands ### diff --git a/alembic/versions/dc1beda6749e_add_tables_for_task_results.py b/alembic/versions/dc1beda6749e_add_tables_for_task_results.py index cb23eb568..82881415c 100644 --- a/alembic/versions/dc1beda6749e_add_tables_for_task_results.py +++ b/alembic/versions/dc1beda6749e_add_tables_for_task_results.py @@ -32,7 +32,8 @@ def upgrade(): def downgrade(): # ### commands auto generated by Alembic - please adjust! ### op.add_column( - "copr_builds", sa.Column("logs", sa.TEXT(), autoincrement=False, nullable=True) + "copr_builds", + sa.Column("logs", sa.TEXT(), autoincrement=False, nullable=True), ) op.drop_table("task_results") # ### end Alembic commands ### diff --git a/alembic/versions/e05e1b04de87_add_koji_build_tags.py b/alembic/versions/e05e1b04de87_add_koji_build_tags.py index 5ab67e092..ac8402ac3 100644 --- a/alembic/versions/e05e1b04de87_add_koji_build_tags.py +++ b/alembic/versions/e05e1b04de87_add_koji_build_tags.py @@ -32,7 +32,10 @@ def upgrade(): sa.PrimaryKeyConstraint("id"), ) op.create_index( - op.f("ix_koji_build_tags_task_id"), "koji_build_tags", ["task_id"], unique=False + op.f("ix_koji_build_tags_task_id"), + "koji_build_tags", + ["task_id"], + unique=False, ) op.create_index( op.f("ix_koji_build_tags_koji_tag_name"), @@ -54,7 +57,8 @@ def downgrade(): # ### commands auto generated by Alembic - please adjust! ### op.drop_index(op.f("ix_koji_build_tags_project_id"), table_name="koji_build_tags") op.drop_index( - op.f("ix_koji_build_tags_koji_tag_name"), table_name="koji_build_tags" + op.f("ix_koji_build_tags_koji_tag_name"), + table_name="koji_build_tags", ) op.drop_index(op.f("ix_koji_build_tags_task_id"), table_name="koji_build_tags") op.drop_table("koji_build_tags") diff --git a/alembic/versions/e907a93de3ef_add_vm_image_builds_table.py b/alembic/versions/e907a93de3ef_add_vm_image_builds_table.py index 2cf8fa4dc..f6e781f61 100644 --- a/alembic/versions/e907a93de3ef_add_vm_image_builds_table.py +++ b/alembic/versions/e907a93de3ef_add_vm_image_builds_table.py @@ -63,7 +63,8 @@ def upgrade(): unique=False, ) op.add_column( - "pipelines", sa.Column("vm_image_build_id", sa.Integer(), nullable=True) + "pipelines", + sa.Column("vm_image_build_id", sa.Integer(), nullable=True), ) op.create_index( op.f("ix_pipelines_vm_image_build_id"), @@ -72,7 +73,11 @@ def upgrade(): unique=False, ) op.create_foreign_key( - None, "pipelines", "vm_image_build_targets", ["vm_image_build_id"], ["id"] + None, + "pipelines", + "vm_image_build_targets", + ["vm_image_build_id"], + ["id"], ) # ### end Alembic commands ### @@ -87,7 +92,8 @@ def downgrade(): table_name="vm_image_build_targets", ) op.drop_index( - op.f("ix_vm_image_build_targets_build_id"), table_name="vm_image_build_targets" + op.f("ix_vm_image_build_targets_build_id"), + table_name="vm_image_build_targets", ) op.drop_table("vm_image_build_targets") # ### end Alembic commands ### diff --git a/alembic/versions/f5792581522c_pull_from_upstream_releated_adjustements.py b/alembic/versions/f5792581522c_pull_from_upstream_releated_adjustements.py index 481ba6834..b08810f4f 100644 --- a/alembic/versions/f5792581522c_pull_from_upstream_releated_adjustements.py +++ b/alembic/versions/f5792581522c_pull_from_upstream_releated_adjustements.py @@ -22,10 +22,10 @@ def upgrade(): # rename propose_downstream_runs table to sync_release_runs op.rename_table("propose_downstream_runs", "sync_release_runs") op.execute( - "ALTER SEQUENCE propose_downstream_runs_id_seq RENAME TO sync_release_runs_id_seq" + "ALTER SEQUENCE propose_downstream_runs_id_seq RENAME TO sync_release_runs_id_seq", ) op.execute( - "ALTER INDEX propose_downstream_runs_pkey RENAME TO sync_release_runs_pkey" + "ALTER INDEX propose_downstream_runs_pkey RENAME TO sync_release_runs_pkey", ) # rename proposedownstreamstatus to syncreleasestatus @@ -33,7 +33,9 @@ def upgrade(): # add job_type column to sync_release_runs sync_release_job_type = postgresql.ENUM( - "pull_from_upstream", "propose_downstream", name="syncreleasejobtype" + "pull_from_upstream", + "propose_downstream", + name="syncreleasejobtype", ) sync_release_job_type.create(op.get_bind()) op.add_column( @@ -41,7 +43,9 @@ def upgrade(): sa.Column( "job_type", sa.Enum( - "pull_from_upstream", "propose_downstream", name="syncreleasejobtype" + "pull_from_upstream", + "propose_downstream", + name="syncreleasejobtype", ), nullable=True, ), @@ -52,15 +56,15 @@ def upgrade(): op.rename_table("propose_downstream_run_targets", "sync_release_run_targets") op.execute( "ALTER SEQUENCE propose_downstream_run_targets_id_seq RENAME TO " - "sync_release_run_targets_id_seq" + "sync_release_run_targets_id_seq", ) op.execute( - "ALTER INDEX propose_downstream_run_targets_pkey RENAME TO sync_release_run_targets_pkey" + "ALTER INDEX propose_downstream_run_targets_pkey RENAME TO sync_release_run_targets_pkey", ) # rename proposedownstreamtargetstatus to syncreleasetargetstatus op.execute( - "ALTER TYPE proposedownstreamtargetstatus RENAME TO syncreleasetargetstatus" + "ALTER TYPE proposedownstreamtargetstatus RENAME TO syncreleasetargetstatus", ) # rename foreign key in sync_release_run_targets @@ -84,10 +88,14 @@ def upgrade(): # rename foreign key in pipelines op.alter_column( - "pipelines", "propose_downstream_run_id", new_column_name="sync_release_run_id" + "pipelines", + "propose_downstream_run_id", + new_column_name="sync_release_run_id", ) op.drop_constraint( - "pipelines_propose_downstream_run_id_fkey", "pipelines", type_="foreignkey" + "pipelines_propose_downstream_run_id_fkey", + "pipelines", + type_="foreignkey", ) op.create_foreign_key( "pipelines_sync_release_run_id_fkey", @@ -100,7 +108,7 @@ def upgrade(): # rename the index op.execute( "ALTER INDEX ix_pipelines_propose_downstream_run_id RENAME TO " - "ix_pipelines_sync_release_run_id" + "ix_pipelines_sync_release_run_id", ) @@ -108,7 +116,9 @@ def downgrade(): # remove job_type column from sync_release_runs op.drop_column("sync_release_runs", "job_type") sync_release_job_type = postgresql.ENUM( - "pull_from_upstream", "propose_downstream", name="syncreleasejobtype" + "pull_from_upstream", + "propose_downstream", + name="syncreleasejobtype", ) sync_release_job_type.drop(op.get_bind()) @@ -118,24 +128,24 @@ def downgrade(): # rename sync_release_runs table to propose_downstream_runs op.rename_table("sync_release_runs", "propose_downstream_runs") op.execute( - "ALTER SEQUENCE sync_release_runs_id_seq RENAME TO propose_downstream_runs_id_seq" + "ALTER SEQUENCE sync_release_runs_id_seq RENAME TO propose_downstream_runs_id_seq", ) op.execute( - "ALTER INDEX sync_release_runs_pkey RENAME TO propose_downstream_runs_pkey" + "ALTER INDEX sync_release_runs_pkey RENAME TO propose_downstream_runs_pkey", ) # rename table sync_release_run_targets to propose_downstream_run_targets op.rename_table("sync_release_run_targets", "propose_downstream_run_targets") op.execute( "ALTER SEQUENCE sync_release_run_targets_id_seq RENAME TO " - "propose_downstream_run_targets_id_seq" + "propose_downstream_run_targets_id_seq", ) op.execute( - "ALTER INDEX sync_release_run_targets_pkey RENAME TO propose_downstream_run_targets_pkey" + "ALTER INDEX sync_release_run_targets_pkey RENAME TO propose_downstream_run_targets_pkey", ) # rename syncreleasetargetstatus to proposedownstreamtargetstatus op.execute( - "ALTER TYPE syncreleasetargetstatus RENAME TO proposedownstreamtargetstatus" + "ALTER TYPE syncreleasetargetstatus RENAME TO proposedownstreamtargetstatus", ) # rename foreign key in propose_downstream_run_targets @@ -159,10 +169,14 @@ def downgrade(): # rename foreign key in pipelines op.alter_column( - "pipelines", "sync_release_run_id", new_column_name="propose_downstream_run_id" + "pipelines", + "sync_release_run_id", + new_column_name="propose_downstream_run_id", ) op.drop_constraint( - "pipelines_sync_release_run_id_fkey", "pipelines", type_="foreignkey" + "pipelines_sync_release_run_id_fkey", + "pipelines", + type_="foreignkey", ) op.create_foreign_key( "pipelines_propose_downstream_run_id_fkey", @@ -175,5 +189,5 @@ def downgrade(): # rename the index op.execute( "ALTER INDEX ix_pipelines_sync_release_run_id RENAME TO " - "ix_pipelines_propose_downstream_run_id" + "ix_pipelines_propose_downstream_run_id", ) diff --git a/files/scripts/allowlist.py b/files/scripts/allowlist.py index 221fed5f4..7b526b27c 100644 --- a/files/scripts/allowlist.py +++ b/files/scripts/allowlist.py @@ -44,7 +44,7 @@ def __verify(self, path: str) -> bool: return click.confirm( "Are you manipulating with a " + click.style(highlighted, fg="red", bold=True) - + f" ‹{path}›?" + + f" ‹{path}›?", ) def convert( @@ -77,7 +77,7 @@ def construct_path() -> str: namespace_or_repo = click.prompt( "(in case of specific repository, type the whole path suffixed with " "‹.git›, e.g. for ‹ogr› repository in ‹packit› namespace type " - "‹packit/ogr.git›)\nPlease input namespace" + "‹packit/ogr.git›)\nPlease input namespace", ) return "/".join((domain, namespace_or_repo)) diff --git a/files/scripts/db-cleanup.py b/files/scripts/db-cleanup.py index 6f0222f01..1b62ee3b5 100755 --- a/files/scripts/db-cleanup.py +++ b/files/scripts/db-cleanup.py @@ -37,7 +37,7 @@ Set POSTGRESQL_* environment variables to define the DB URL. See get_pg_url() for details. -""" +""", ) parser.add_argument( "age", @@ -88,7 +88,7 @@ .filter(PipelineModel.id == None) # noqa ) stmt = delete(tf_copr_association_table).where( - tf_copr_association_table.c.copr_id.in_(orphaned) + tf_copr_association_table.c.copr_id.in_(orphaned), ) conn.execute(stmt) stmt = delete(CoprBuildTargetModel).where(CoprBuildTargetModel.id.in_(orphaned)) @@ -210,6 +210,6 @@ select(ProjectAuthenticationIssueModel.project_id), ) stmt = delete(GitProjectModel).where( - GitProjectModel.id.not_in(referenced_projects) + GitProjectModel.id.not_in(referenced_projects), ) conn.execute(stmt) diff --git a/files/scripts/webhook.py b/files/scripts/webhook.py index 110172804..f61dcdbc1 100644 --- a/files/scripts/webhook.py +++ b/files/scripts/webhook.py @@ -90,12 +90,14 @@ def generate(self) -> Dict: ) @click.option("--pr", help="ID of the pull request.", default=None, type=int) @click.argument( - "project", default="packit-service/hello-world", metavar="" + "project", + default="packit-service/hello-world", + metavar="", ) def run(hostname, pr, project, github_token): if "/" not in project: click.echo( - 'project should be specified as "PROJECT/NAMESPACE", e.g. "packit-service/ogr"' + 'project should be specified as "PROJECT/NAMESPACE", e.g. "packit-service/ogr"', ) return 1 if pr is not None: @@ -104,7 +106,9 @@ def run(hostname, pr, project, github_token): j = p.generate() print(json.dumps(j, indent=2)) response = requests.post( - f"https://{hostname}/api/webhooks/github", json=j, verify=False + f"https://{hostname}/api/webhooks/github", + json=j, + verify=False, ) print(response.text) diff --git a/packit_service/config.py b/packit_service/config.py index 4359a77b0..df4228dfe 100644 --- a/packit_service/config.py +++ b/packit_service/config.py @@ -147,14 +147,14 @@ def __init__( # - github.com/other-private-namespace # - gitlab.com/private/namespace self.enabled_private_namespaces: Set[str] = set( - enabled_private_namespaces or [] + enabled_private_namespaces or [], ) # Explicit list of project we allow the internal TF instance to be used- # e.g.: # - github.com/other-private-namespace/project # - gitlab.com/namespace/project self.enabled_projects_for_internal_tf: Set[str] = set( - enabled_projects_for_internal_tf or [] + enabled_projects_for_internal_tf or [], ) self.projects_to_sync = projects_to_sync or [] @@ -165,7 +165,7 @@ def __init__( self.koji_web_url = koji_web_url self.enabled_projects_for_srpm_in_copr: Set[str] = set( - enabled_projects_for_srpm_in_copr or [] + enabled_projects_for_srpm_in_copr or [], ) self.comment_command_prefix = comment_command_prefix @@ -228,21 +228,26 @@ def get_from_dict(cls, raw_dict: dict) -> "ServiceConfig": if a_h: config.command_handler = RunCommandType(a_h) config.command_handler_work_dir = raw_dict.get( - "command_handler_work_dir", SANDCASTLE_WORK_DIR + "command_handler_work_dir", + SANDCASTLE_WORK_DIR, ) config.command_handler_pvc_env_var = raw_dict.get( - "command_handler_pvc_env_var", SANDCASTLE_PVC + "command_handler_pvc_env_var", + SANDCASTLE_PVC, ) config.command_handler_image_reference = raw_dict.get( - "command_handler_image_reference", SANDCASTLE_IMAGE + "command_handler_image_reference", + SANDCASTLE_IMAGE, ) # default project for oc cluster up config.command_handler_k8s_namespace = raw_dict.get( - "command_handler_k8s_namespace", SANDCASTLE_DEFAULT_PROJECT + "command_handler_k8s_namespace", + SANDCASTLE_DEFAULT_PROJECT, ) config.testing_farm_api_url = raw_dict.get( - "testing_farm_api_url", TESTING_FARM_API_URL + "testing_farm_api_url", + TESTING_FARM_API_URL, ) logger.debug(f"Loaded config: {config}") @@ -252,7 +257,8 @@ def get_from_dict(cls, raw_dict: dict) -> "ServiceConfig": def get_service_config(cls) -> "ServiceConfig": if cls.service_config is None: config_file = os.getenv( - "PACKIT_SERVICE_CONFIG", Path.home() / ".config" / CONFIG_FILE_NAME + "PACKIT_SERVICE_CONFIG", + Path.home() / ".config" / CONFIG_FILE_NAME, ) logger.debug(f"Loading service config from: {config_file}") @@ -308,7 +314,8 @@ def create_issue_if_needed( # TODO: store in DB issue = project.create_issue( - title=packit_title if add_packit_prefix else title, body=message + title=packit_title if add_packit_prefix else title, + body=message, ) logger.debug(f"Issue #{issue.id} created: {issue.url}") return issue @@ -338,7 +345,7 @@ def get_package_config_from_repo( if not package_config and fail_when_missing: raise PackitMissingConfigException( f"No config file for packit (e.g. `.packit.yaml`) found in " - f"{project_to_search_in.full_repo_name} on commit {reference}" + f"{project_to_search_in.full_repo_name} on commit {reference}", ) except PackitConfigException as ex: message = ( @@ -359,10 +366,12 @@ def get_package_config_from_repo( if pr_id: project.get_pr(pr_id).comment(message) elif created_issue := PackageConfigGetter.create_issue_if_needed( - project, title="Invalid config", message=message + project, + title="Invalid config", + message=message, ): logger.debug( - f"Created issue for invalid packit config: {created_issue.url}" + f"Created issue for invalid packit config: {created_issue.url}", ) raise ex diff --git a/packit_service/models.py b/packit_service/models.py index dd8a31944..9eb4a9181 100644 --- a/packit_service/models.py +++ b/packit_service/models.py @@ -132,7 +132,8 @@ def sa_session_transaction(commit: bool = False) -> SQLASession: def optional_time( - datetime_object: Union[datetime, None], fmt: str = "%d/%m/%Y %H:%M:%S" + datetime_object: Union[datetime, None], + fmt: str = "%d/%m/%Y %H:%M:%S", ) -> Union[str, None]: """ Returns a formatted date-time string if argument is a datetime object. @@ -163,7 +164,7 @@ def optional_timestamp(datetime_object: Optional[datetime]) -> Optional[int]: def get_submitted_time_from_model( - model: Union["CoprBuildTargetModel", "TFTTestRunTargetModel"] + model: Union["CoprBuildTargetModel", "TFTTestRunTargetModel"], ) -> datetime: # TODO: unify `submitted_name` (or better -> create for both models `task_accepted_time`) # to delete this mess plz @@ -240,7 +241,7 @@ def filter_most_recent_target_models_by_status( statuses_to_filter_with: List[str], ) -> Union[Set["CoprBuildTargetModel"], Set["TFTTestRunTargetModel"]]: logger.info( - f"Trying to filter targets with possible status: {statuses_to_filter_with} in {models}" + f"Trying to filter targets with possible status: {statuses_to_filter_with} in {models}", ) filtered_target_models = { @@ -261,7 +262,8 @@ def filter_most_recent_target_names_by_status( statuses_to_filter_with: List[str], ) -> Optional[Set[str]]: filtered_models = filter_most_recent_target_models_by_status( - models, statuses_to_filter_with + models, + statuses_to_filter_with, ) return {model.target for model in filtered_models} if filtered_models else None @@ -295,7 +297,8 @@ class BuildsAndTestsConnector: def get_project_event_models(self) -> Iterable["ProjectEventModel"]: with sa_session_transaction() as session: return session.query(ProjectEventModel).filter_by( - type=self.project_event_model_type, event_id=self.id + type=self.project_event_model_type, + event_id=self.id, ) def get_runs(self) -> List["PipelineModel"]: @@ -303,7 +306,8 @@ def get_runs(self) -> List["PipelineModel"]: return [run for project_event in project_events for run in project_event.runs] def _get_run_item( - self, model_type: Type["AbstractBuildTestDbType"] + self, + model_type: Type["AbstractBuildTestDbType"], ) -> List["AbstractBuildTestDbType"]: runs = self.get_runs() models = [] @@ -469,7 +473,8 @@ class AnityaProjectModel(Base): package = Column(String) versions = relationship("AnityaVersionModel", back_populates="project") multiple_versions = relationship( - "AnityaMultipleVersionsModel", back_populates="project" + "AnityaMultipleVersionsModel", + back_populates="project", ) @classmethod @@ -479,13 +484,18 @@ def get_by_id(cls, id_: int) -> Optional["AnityaProjectModel"]: @classmethod def get_or_create( - cls, project_name: str, project_id: int, package: str + cls, + project_name: str, + project_id: int, + package: str, ) -> "AnityaProjectModel": with sa_session_transaction(commit=True) as session: project = ( session.query(AnityaProjectModel) .filter_by( - project_name=project_name, project_id=project_id, package=package + project_name=project_name, + project_id=project_id, + package=package, ) .first() ) @@ -518,7 +528,9 @@ def get_or_create( ) -> "AnityaMultipleVersionsModel": with sa_session_transaction(commit=True) as session: project = AnityaProjectModel.get_or_create( - project_id=project_id, project_name=project_name, package=package + project_id=project_id, + project_name=project_name, + package=package, ) project_version = ( session.query(AnityaMultipleVersionsModel) @@ -565,7 +577,9 @@ def get_or_create( ) -> "AnityaVersionModel": with sa_session_transaction(commit=True) as session: project = AnityaProjectModel.get_or_create( - project_id=project_id, project_name=project_name, package=package + project_id=project_id, + project_name=project_name, + package=package, ) project_version = ( session.query(AnityaVersionModel) @@ -604,10 +618,12 @@ class GitProjectModel(Base): issues = relationship("IssueModel", back_populates="project") koji_build_tags = relationship("KojiBuildTagModel", back_populates="project") sync_release_pull_requests = relationship( - "SyncReleasePullRequestModel", back_populates="project" + "SyncReleasePullRequestModel", + back_populates="project", ) project_authentication_issue = relationship( - "ProjectAuthenticationIssueModel", back_populates="project" + "ProjectAuthenticationIssueModel", + back_populates="project", ) project_url = Column(String) @@ -628,19 +644,26 @@ def set_onboarded_downstream(self, onboarded: bool): @classmethod def get_or_create( - cls, namespace: str, repo_name: str, project_url: str + cls, + namespace: str, + repo_name: str, + project_url: str, ) -> "GitProjectModel": with sa_session_transaction(commit=True) as session: project = ( session.query(GitProjectModel) .filter_by( - namespace=namespace, repo_name=repo_name, project_url=project_url + namespace=namespace, + repo_name=repo_name, + project_url=project_url, ) .first() ) if not project: project = cls( - repo_name=repo_name, namespace=namespace, project_url=project_url + repo_name=repo_name, + namespace=namespace, + project_url=project_url, ) session.add(project) return project @@ -668,7 +691,10 @@ def get_range(cls, first: int, last: int) -> Iterable["GitProjectModel"]: @classmethod def get_by_forge( - cls, first: int, last: int, forge: str + cls, + first: int, + last: int, + forge: str, ) -> Iterable["GitProjectModel"]: """Return projects of given forge""" with sa_session_transaction() as session: @@ -681,7 +707,11 @@ def get_by_forge( @classmethod def get_by_forge_namespace( - cls, first: int, last: int, forge: str, namespace: str + cls, + first: int, + last: int, + forge: str, + namespace: str, ) -> Iterable["GitProjectModel"]: """Return projects of given forge and namespace""" with sa_session_transaction() as session: @@ -693,7 +723,10 @@ def get_by_forge_namespace( @classmethod def get_project( - cls, forge: str, namespace: str, repo_name: str + cls, + forge: str, + namespace: str, + repo_name: str, ) -> Optional["GitProjectModel"]: """Return one project which matches said criteria""" with sa_session_transaction() as session: @@ -705,7 +738,12 @@ def get_project( @classmethod def get_project_prs( - cls, first: int, last: int, forge: str, namespace: str, repo_name: str + cls, + first: int, + last: int, + forge: str, + namespace: str, + repo_name: str, ) -> Iterable["PullRequestModel"]: with sa_session_transaction() as session: return ( @@ -722,7 +760,12 @@ def get_project_prs( @classmethod def get_project_issues( - cls, first: int, last: int, forge: str, namespace: str, repo_name: str + cls, + first: int, + last: int, + forge: str, + namespace: str, + repo_name: str, ) -> Iterable["IssueModel"]: with sa_session_transaction() as session: return ( @@ -738,7 +781,12 @@ def get_project_issues( @classmethod def get_project_branches( - cls, first: int, last: int, forge: str, namespace: str, repo_name: str + cls, + first: int, + last: int, + forge: str, + namespace: str, + repo_name: str, ) -> Iterable["GitBranchModel"]: with sa_session_transaction() as session: return ( @@ -754,7 +802,12 @@ def get_project_branches( @classmethod def get_project_releases( - cls, first: int, last: int, forge: str, namespace: str, repo_name: str + cls, + first: int, + last: int, + forge: str, + namespace: str, + repo_name: str, ) -> Iterable["ProjectReleaseModel"]: with sa_session_transaction() as session: return ( @@ -773,7 +826,10 @@ def get_project_releases( @classmethod @ttl_cache(maxsize=_CACHE_MAXSIZE, ttl=_CACHE_TTL) def get_active_projects( - cls, top: Optional[int] = None, datetime_from=None, datetime_to=None + cls, + top: Optional[int] = None, + datetime_from=None, + datetime_to=None, ) -> list[str]: """ Active project is the one with at least one activity (=one pipeline) @@ -781,8 +837,10 @@ def get_active_projects( """ return list( cls.get_active_projects_usage_numbers( - top=top, datetime_from=datetime_from, datetime_to=datetime_to - ).keys() + top=top, + datetime_from=datetime_from, + datetime_to=datetime_to, + ).keys(), ) @classmethod @@ -794,14 +852,19 @@ def get_active_projects_count(cls, datetime_from=None, datetime_to=None) -> int: """ return len( cls.get_active_projects_usage_numbers( - top=None, datetime_from=datetime_from, datetime_to=datetime_to - ) + top=None, + datetime_from=datetime_from, + datetime_to=datetime_to, + ), ) @classmethod @ttl_cache(maxsize=_CACHE_MAXSIZE, ttl=_CACHE_TTL) def get_active_projects_usage_numbers( - cls, top: Optional[int] = 10, datetime_from=None, datetime_to=None + cls, + top: Optional[int] = 10, + datetime_from=None, + datetime_to=None, ) -> dict[str, int]: """ Get the most active projects sorted by the number of related pipelines. @@ -814,10 +877,10 @@ def get_active_projects_usage_numbers( datetime_to=datetime_to, top=None, project_event_type=project_event_type, - ) + ), ) return dict( - sorted(all_usage_numbers.items(), key=lambda x: x[1], reverse=True)[:top] + sorted(all_usage_numbers.items(), key=lambda x: x[1], reverse=True)[:top], ) # ALL PROJECTS @@ -846,13 +909,15 @@ def get_instance_numbers(cls) -> Dict[str, int]: func.count(GitProjectModel.instance_url), ) .group_by(GitProjectModel.instance_url) - .all() + .all(), ) @classmethod @ttl_cache(maxsize=_CACHE_MAXSIZE, ttl=_CACHE_TTL) def get_instance_numbers_for_active_projects( - cls, datetime_from=None, datetime_to=None + cls, + datetime_from=None, + datetime_to=None, ) -> Dict[str, int]: """ Get the number of projects (at least one pipeline during the time period) @@ -888,7 +953,8 @@ def get_instance_numbers_for_active_projects( query = query.filter(PipelineModel.datetime <= datetime_to) query = query.group_by( - GitProjectModel.project_url, GitProjectModel.instance_url + GitProjectModel.project_url, + GitProjectModel.instance_url, ) for instance, project in query.all(): projects_per_instance.setdefault(instance, set()) @@ -918,13 +984,17 @@ def get_project_event_usage_count( datetime_to=datetime_to, project_event_type=project_event_type, top=None, - ).values() + ).values(), ) @classmethod @ttl_cache(maxsize=_CACHE_MAXSIZE, ttl=_CACHE_TTL) def get_project_event_usage_numbers( - cls, project_event_type, datetime_from=None, datetime_to=None, top=None + cls, + project_event_type, + datetime_from=None, + datetime_to=None, + top=None, ) -> dict[str, int]: """ For each project, get the number of triggers of a given type with at least one pipeline @@ -939,7 +1009,7 @@ def get_project_event_usage_numbers( session.query( GitProjectModel.project_url, count(project_event_model.id).over( - partition_by=GitProjectModel.project_url + partition_by=GitProjectModel.project_url, ), ) .join( @@ -967,9 +1037,9 @@ def get_project_event_usage_numbers( .order_by( desc( count(project_event_model.id).over( - partition_by=GitProjectModel.project_url - ) - ) + partition_by=GitProjectModel.project_url, + ), + ), ) ) @@ -998,7 +1068,7 @@ def get_job_usage_numbers_count( job_result_model=job_result_model, top=None, project_event_type=project_event_type, - ).values() + ).values(), ) @classmethod @@ -1019,7 +1089,7 @@ def get_job_usage_numbers_count_all_project_events( datetime_to=datetime_to, job_result_model=job_result_model, top=None, - ).values() + ).values(), ) @classmethod @@ -1054,7 +1124,7 @@ def get_job_usage_numbers( session.query( GitProjectModel.project_url, count(job_result_model.id).over( - partition_by=GitProjectModel.project_url + partition_by=GitProjectModel.project_url, ), ) .join( @@ -1082,12 +1152,12 @@ def get_job_usage_numbers( .order_by( desc( count(job_result_model.id).over( - partition_by=GitProjectModel.project_url - ) - ) + partition_by=GitProjectModel.project_url, + ), + ), ) .limit(top) - .all() + .all(), ) @classmethod @@ -1111,10 +1181,10 @@ def get_job_usage_numbers_all_project_events( top=None, job_result_model=job_result_model, project_event_type=project_event_type, - ) + ), ) return dict( - sorted(all_usage_numbers.items(), key=lambda x: x[1], reverse=True)[:top] + sorted(all_usage_numbers.items(), key=lambda x: x[1], reverse=True)[:top], ) @classmethod @@ -1162,19 +1232,27 @@ class SyncReleasePullRequestModel(Base): pr_id = Column(Integer, index=True) project_id = Column(Integer, ForeignKey("git_projects.id"), index=True) project = relationship( - "GitProjectModel", back_populates="sync_release_pull_requests" + "GitProjectModel", + back_populates="sync_release_pull_requests", ) sync_release_targets = relationship( - "SyncReleaseTargetModel", back_populates="pull_request" + "SyncReleaseTargetModel", + back_populates="pull_request", ) @classmethod def get_or_create( - cls, pr_id: int, namespace: str, repo_name: str, project_url: str + cls, + pr_id: int, + namespace: str, + repo_name: str, + project_url: str, ) -> "SyncReleasePullRequestModel": with sa_session_transaction(commit=True) as session: project = GitProjectModel.get_or_create( - namespace=namespace, repo_name=repo_name, project_url=project_url + namespace=namespace, + repo_name=repo_name, + project_url=project_url, ) pr = ( session.query(SyncReleasePullRequestModel) @@ -1190,11 +1268,17 @@ def get_or_create( @classmethod def get( - cls, pr_id: int, namespace: str, repo_name: str, project_url: str + cls, + pr_id: int, + namespace: str, + repo_name: str, + project_url: str, ) -> Optional["SyncReleasePullRequestModel"]: with sa_session_transaction(commit=True) as session: project = GitProjectModel.get_or_create( - namespace=namespace, repo_name=repo_name, project_url=project_url + namespace=namespace, + repo_name=repo_name, + project_url=project_url, ) return ( session.query(SyncReleasePullRequestModel) @@ -1230,11 +1314,17 @@ class PullRequestModel(BuildsAndTestsConnector, Base): @classmethod def get_or_create( - cls, pr_id: int, namespace: str, repo_name: str, project_url: str + cls, + pr_id: int, + namespace: str, + repo_name: str, + project_url: str, ) -> "PullRequestModel": with sa_session_transaction(commit=True) as session: project = GitProjectModel.get_or_create( - namespace=namespace, repo_name=repo_name, project_url=project_url + namespace=namespace, + repo_name=repo_name, + project_url=project_url, ) pr = ( session.query(PullRequestModel) @@ -1250,11 +1340,17 @@ def get_or_create( @classmethod def get( - cls, pr_id: int, namespace: str, repo_name: str, project_url: str + cls, + pr_id: int, + namespace: str, + repo_name: str, + project_url: str, ) -> Optional["PullRequestModel"]: with sa_session_transaction(commit=True) as session: project = GitProjectModel.get_or_create( - namespace=namespace, repo_name=repo_name, project_url=project_url + namespace=namespace, + repo_name=repo_name, + project_url=project_url, ) return ( session.query(PullRequestModel) @@ -1283,11 +1379,17 @@ class IssueModel(BuildsAndTestsConnector, Base): @classmethod def get_or_create( - cls, issue_id: int, namespace: str, repo_name: str, project_url: str + cls, + issue_id: int, + namespace: str, + repo_name: str, + project_url: str, ) -> "IssueModel": with sa_session_transaction(commit=True) as session: project = GitProjectModel.get_or_create( - namespace=namespace, repo_name=repo_name, project_url=project_url + namespace=namespace, + repo_name=repo_name, + project_url=project_url, ) issue = ( session.query(IssueModel) @@ -1322,11 +1424,17 @@ class GitBranchModel(BuildsAndTestsConnector, Base): @classmethod def get_or_create( - cls, branch_name: str, namespace: str, repo_name: str, project_url: str + cls, + branch_name: str, + namespace: str, + repo_name: str, + project_url: str, ) -> "GitBranchModel": with sa_session_transaction(commit=True) as session: project = GitProjectModel.get_or_create( - namespace=namespace, repo_name=repo_name, project_url=project_url + namespace=namespace, + repo_name=repo_name, + project_url=project_url, ) git_branch = ( session.query(GitBranchModel) @@ -1371,7 +1479,9 @@ def get_or_create( ) -> "ProjectReleaseModel": with sa_session_transaction(commit=True) as session: project = GitProjectModel.get_or_create( - namespace=namespace, repo_name=repo_name, project_url=project_url + namespace=namespace, + repo_name=repo_name, + project_url=project_url, ) project_release = ( session.query(ProjectReleaseModel) @@ -1423,12 +1533,16 @@ def get_or_create( ) -> "KojiBuildTagModel": with sa_session_transaction(commit=True) as session: project = GitProjectModel.get_or_create( - namespace=namespace, repo_name=repo_name, project_url=project_url + namespace=namespace, + repo_name=repo_name, + project_url=project_url, ) koji_build_tag = ( session.query(KojiBuildTagModel) .filter_by( - task_id=task_id, koji_tag_name=koji_tag_name, project_id=project.id + task_id=task_id, + koji_tag_name=koji_tag_name, + project_id=project.id, ) .first() ) @@ -1464,7 +1578,8 @@ def __repr__(self): ] MODEL_FOR_PROJECT_EVENT: Dict[ - ProjectEventModelType, Type[AbstractProjectObjectDbType] + ProjectEventModelType, + Type[AbstractProjectObjectDbType], ] = { ProjectEventModelType.pull_request: PullRequestModel, ProjectEventModelType.branch_push: GitBranchModel, @@ -1661,7 +1776,10 @@ def add_koji_build_tag_event( @classmethod def get_or_create( - cls, type: ProjectEventModelType, event_id: int, commit_sha: str + cls, + type: ProjectEventModelType, + event_id: int, + commit_sha: str, ) -> "ProjectEventModel": with sa_session_transaction(commit=True) as session: project_event = ( @@ -1684,7 +1802,8 @@ def get_by_id(cls, id_: int) -> Optional["ProjectEventModel"]: @classmethod def get_older_than_with_packages_config( - cls, delta: timedelta + cls, + delta: timedelta, ) -> Iterable["ProjectEventModel"]: """Return project events with all runs older than delta that store packages config.""" delta_ago = datetime.now(timezone.utc) - delta @@ -1693,7 +1812,7 @@ def get_older_than_with_packages_config( session.query(ProjectEventModel) .filter(ProjectEventModel.packages_config.isnot(None)) .filter( - ~ProjectEventModel.runs.any(PipelineModel.datetime >= delta_ago) + ~ProjectEventModel.runs.any(PipelineModel.datetime >= delta_ago), ) ) @@ -1746,33 +1865,47 @@ class PipelineModel(Base): srpm_build_id = Column(Integer, ForeignKey("srpm_builds.id"), index=True) srpm_build = relationship("SRPMBuildModel", back_populates="runs") copr_build_group_id = Column( - Integer, ForeignKey("copr_build_groups.id"), index=True + Integer, + ForeignKey("copr_build_groups.id"), + index=True, ) copr_build_group = relationship("CoprBuildGroupModel", back_populates="runs") koji_build_group_id = Column( - Integer, ForeignKey("koji_build_groups.id"), index=True + Integer, + ForeignKey("koji_build_groups.id"), + index=True, ) koji_build_group = relationship("KojiBuildGroupModel", back_populates="runs") vm_image_build_id = Column( - Integer, ForeignKey("vm_image_build_targets.id"), index=True + Integer, + ForeignKey("vm_image_build_targets.id"), + index=True, ) vm_image_build = relationship("VMImageBuildTargetModel", back_populates="runs") test_run_group_id = Column( - Integer, ForeignKey("tft_test_run_groups.id"), index=True + Integer, + ForeignKey("tft_test_run_groups.id"), + index=True, ) test_run_group = relationship("TFTTestRunGroupModel", back_populates="runs") sync_release_run_id = Column( - Integer, ForeignKey("sync_release_runs.id"), index=True + Integer, + ForeignKey("sync_release_runs.id"), + index=True, ) sync_release_run = relationship("SyncReleaseModel", back_populates="runs") bodhi_update_group_id = Column( - Integer, ForeignKey("bodhi_update_groups.id"), index=True + Integer, + ForeignKey("bodhi_update_groups.id"), + index=True, ) bodhi_update_group = relationship("BodhiUpdateGroupModel", back_populates="runs") @classmethod def create( - cls, project_event: ProjectEventModel, package_name: str = None + cls, + project_event: ProjectEventModel, + package_name: str = None, ) -> "PipelineModel": """Create a pipeline triggered by the given project_event. If project is a monorepo, then specify for which @@ -1802,13 +1935,13 @@ def __query_merged_runs(cls): func.min(PipelineModel.id).label("merged_id"), PipelineModel.srpm_build_id, func.array_agg(psql_array([PipelineModel.copr_build_group_id])).label( - "copr_build_group_id" + "copr_build_group_id", ), func.array_agg(psql_array([PipelineModel.koji_build_group_id])).label( - "koji_build_group_id" + "koji_build_group_id", ), func.array_agg(psql_array([PipelineModel.test_run_group_id])).label( - "test_run_group_id" + "test_run_group_id", ), func.array_agg(psql_array([PipelineModel.sync_release_run_id])).label( "sync_release_run_id", @@ -1865,7 +1998,8 @@ class CoprBuildGroupModel(ProjectAndEventsConnector, GroupModel, Base): runs = relationship("PipelineModel", back_populates="copr_build_group") copr_build_targets = relationship( - "CoprBuildTargetModel", back_populates="group_of_targets" + "CoprBuildTargetModel", + back_populates="group_of_targets", ) def __repr__(self) -> str: @@ -1963,11 +2097,14 @@ class CoprBuildTargetModel(GroupAndTargetModelConnector, Base): # ] built_packages = Column(JSON) copr_build_group_id = Column( - Integer, ForeignKey("copr_build_groups.id"), index=True + Integer, + ForeignKey("copr_build_groups.id"), + index=True, ) group_of_targets = relationship( - "CoprBuildGroupModel", back_populates="copr_build_targets" + "CoprBuildGroupModel", + back_populates="copr_build_targets", ) scan = relationship("OSHScanModel", back_populates="copr_build_target") @@ -2024,12 +2161,14 @@ def get_by_id(cls, id_: int) -> Optional["CoprBuildTargetModel"]: def get_all(cls) -> Iterable["CoprBuildTargetModel"]: with sa_session_transaction() as session: return session.query(CoprBuildTargetModel).order_by( - desc(CoprBuildTargetModel.id) + desc(CoprBuildTargetModel.id), ) @classmethod def get_merged_chroots( - cls, first: int, last: int + cls, + first: int, + last: int, ) -> Iterable["CoprBuildTargetModel"]: """Returns a list of unique build ids with merged status, chroots Details: @@ -2045,17 +2184,17 @@ def get_merged_chroots( CoprBuildTargetModel.build_id, # Merge chroots and statuses from different rows into one func.array_agg(psql_array([CoprBuildTargetModel.target])).label( - "target" + "target", ), func.json_agg(psql_array([CoprBuildTargetModel.status])).label( - "status" + "status", ), func.array_agg(psql_array([CoprBuildTargetModel.id])).label( - "packit_id_per_chroot" + "packit_id_per_chroot", ), ) .group_by( - CoprBuildTargetModel.build_id + CoprBuildTargetModel.build_id, ) # Group by identical element(s) .order_by(desc("new_id")) .slice(first, last) @@ -2064,7 +2203,8 @@ def get_merged_chroots( # Returns all builds with that build_id, irrespective of target @classmethod def get_all_by_build_id( - cls, build_id: Union[str, int] + cls, + build_id: Union[str, int], ) -> Iterable["CoprBuildTargetModel"]: if isinstance(build_id, int): # See the comment in get_by_task_id() @@ -2081,7 +2221,9 @@ def get_all_by_status(cls, status: BuildStatus) -> Iterable["CoprBuildTargetMode # returns the build matching the build_id and the target @classmethod def get_by_build_id( - cls, build_id: Union[str, int], target: str = None + cls, + build_id: Union[str, int], + target: str = None, ) -> Optional["CoprBuildTargetModel"]: if isinstance(build_id, int): # PG is pesky about this: @@ -2212,7 +2354,8 @@ class KojiBuildGroupModel(ProjectAndEventsConnector, GroupModel, Base): runs = relationship("PipelineModel", back_populates="koji_build_group") koji_build_targets = relationship( - "KojiBuildTargetModel", back_populates="group_of_targets" + "KojiBuildTargetModel", + back_populates="group_of_targets", ) @property @@ -2264,7 +2407,8 @@ class BodhiUpdateTargetModel(GroupAndTargetModelConnector, Base): bodhi_update_group_id = Column(Integer, ForeignKey("bodhi_update_groups.id")) group_of_targets = relationship( - "BodhiUpdateGroupModel", back_populates="bodhi_update_targets" + "BodhiUpdateGroupModel", + back_populates="bodhi_update_targets", ) def set_status(self, status: str): @@ -2362,7 +2506,8 @@ def get_all_projects(cls) -> Set["GitProjectModel"]: @classmethod def get_first_successful_by_sidetag( - cls, sidetag: str + cls, + sidetag: str, ) -> Optional["BodhiUpdateTargetModel"]: with sa_session_transaction() as session: return ( @@ -2382,7 +2527,8 @@ class BodhiUpdateGroupModel(ProjectAndEventsConnector, GroupModel, Base): runs = relationship("PipelineModel", back_populates="bodhi_update_group") bodhi_update_targets = relationship( - "BodhiUpdateTargetModel", back_populates="group_of_targets" + "BodhiUpdateTargetModel", + back_populates="group_of_targets", ) @property @@ -2449,7 +2595,8 @@ class KojiBuildTargetModel(GroupAndTargetModelConnector, Base): koji_build_group_id = Column(Integer, ForeignKey("koji_build_groups.id")) group_of_targets = relationship( - "KojiBuildGroupModel", back_populates="koji_build_targets" + "KojiBuildGroupModel", + back_populates="koji_build_targets", ) def set_status(self, status: str): @@ -2517,11 +2664,14 @@ def get_all(cls) -> Iterable["KojiBuildTargetModel"]: @classmethod def get_range( - cls, first: int, last: int, scratch: bool = None + cls, + first: int, + last: int, + scratch: bool = None, ) -> Iterable["KojiBuildTargetModel"]: with sa_session_transaction() as session: query = session.query(KojiBuildTargetModel).order_by( - desc(KojiBuildTargetModel.id) + desc(KojiBuildTargetModel.id), ) if scratch is not None: @@ -2531,7 +2681,9 @@ def get_range( @classmethod def get_by_task_id( - cls, task_id: Union[str, int], target: Optional[str] = None + cls, + task_id: Union[str, int], + target: Optional[str] = None, ) -> Optional["KojiBuildTargetModel"]: """ Returns the first build matching the build_id and optionally the target. @@ -2674,7 +2826,8 @@ def create_with_new_run( # Create a new run model, reuse project_event_model if it exists: new_run_model = PipelineModel.create( - project_event=project_event_model, package_name=package_name + project_event=project_event_model, + package_name=package_name, ) new_run_model.srpm_build = srpm_build session.add(new_run_model) @@ -2700,7 +2853,8 @@ def get_range(cls, first: int, last: int) -> Iterable["SRPMBuildModel"]: @classmethod def get_by_copr_build_id( - cls, copr_build_id: Union[str, int] + cls, + copr_build_id: Union[str, int], ) -> Optional["SRPMBuildModel"]: if isinstance(copr_build_id, int): copr_build_id = str(copr_build_id) @@ -2781,7 +2935,10 @@ class AllowlistModel(Base): @classmethod def add_namespace( - cls, namespace: str, status: str, fas_account: Optional[str] = None + cls, + namespace: str, + status: str, + fas_account: Optional[str] = None, ): """ Adds namespace with specific status to the allowlist. If namespace is present, @@ -2845,7 +3002,7 @@ def get_by_status(cls, status: str) -> Iterable["AllowlistModel"]: def remove_namespace(cls, namespace: str): with sa_session_transaction(commit=True) as session: namespace_entry = session.query(AllowlistModel).filter_by( - namespace=namespace + namespace=namespace, ) if namespace_entry.one_or_none(): namespace_entry.delete() @@ -2912,7 +3069,8 @@ class TFTTestRunGroupModel(ProjectAndEventsConnector, GroupModel, Base): runs = relationship("PipelineModel", back_populates="test_run_group") tft_test_run_targets = relationship( - "TFTTestRunTargetModel", back_populates="group_of_targets" + "TFTTestRunTargetModel", + back_populates="group_of_targets", ) def __repr__(self) -> str: @@ -2973,7 +3131,8 @@ class TFTTestRunTargetModel(GroupAndTargetModelConnector, Base): backref="tft_test_run_targets", ) group_of_targets = relationship( - "TFTTestRunGroupModel", back_populates="tft_test_run_targets" + "TFTTestRunGroupModel", + back_populates="tft_test_run_targets", ) def set_status(self, status: TestingFarmResult, created: Optional[DateTime] = None): @@ -3040,13 +3199,14 @@ def get_by_pipeline_id(cls, pipeline_id: str) -> Optional["TFTTestRunTargetModel @classmethod def get_all_by_status( - cls, *status: TestingFarmResult + cls, + *status: TestingFarmResult, ) -> Iterable["TFTTestRunTargetModel"]: """Returns all runs which currently have their status set to one of the requested statuses.""" with sa_session_transaction() as session: return session.query(TFTTestRunTargetModel).filter( - TFTTestRunTargetModel.status.in_(status) + TFTTestRunTargetModel.status.in_(status), ) @classmethod @@ -3119,10 +3279,12 @@ class SyncReleaseTargetModel(ProjectAndEventsConnector, Base): downstream_pr_id = Column(Integer, ForeignKey("sync_release_pull_request.id")) sync_release = relationship( - "SyncReleaseModel", back_populates="sync_release_targets" + "SyncReleaseModel", + back_populates="sync_release_targets", ) pull_request = relationship( - "SyncReleasePullRequestModel", back_populates="sync_release_targets" + "SyncReleasePullRequestModel", + back_populates="sync_release_targets", ) def __repr__(self) -> str: @@ -3130,7 +3292,9 @@ def __repr__(self) -> str: @classmethod def create( - cls, status: SyncReleaseTargetStatus, branch: str + cls, + status: SyncReleaseTargetStatus, + branch: str, ) -> "SyncReleaseTargetModel": with sa_session_transaction(commit=True) as session: sync_release_target = cls() @@ -3190,7 +3354,7 @@ def get_all_downstream_projects(cls) -> Set["GitProjectModel"]: == SyncReleasePullRequestModel.id, ) .filter( - SyncReleaseTargetModel.status == SyncReleaseTargetStatus.submitted + SyncReleaseTargetModel.status == SyncReleaseTargetStatus.submitted, ) ) return {row[0] for row in query} @@ -3213,12 +3377,14 @@ class SyncReleaseModel(ProjectAndEventsConnector, Base): status = Column(Enum(SyncReleaseStatus)) submitted_time = Column(DateTime, default=datetime.utcnow) job_type = Column( - Enum(SyncReleaseJobType), default=SyncReleaseJobType.propose_downstream + Enum(SyncReleaseJobType), + default=SyncReleaseJobType.propose_downstream, ) runs = relationship("PipelineModel", back_populates="sync_release_run") sync_release_targets = relationship( - "SyncReleaseTargetModel", back_populates="sync_release" + "SyncReleaseTargetModel", + back_populates="sync_release", ) def __repr__(self) -> str: @@ -3261,7 +3427,8 @@ def create_with_new_run( # Create a pipeline, reuse project_event_model if it exists: pipeline = PipelineModel.create( - project_event=project_event_model, package_name=package_name + project_event=project_event_model, + package_name=package_name, ) pipeline.sync_release_run = sync_release session.add(pipeline) @@ -3313,7 +3480,8 @@ class ProjectAuthenticationIssueModel(Base): id = Column(Integer, primary_key=True) project = relationship( - "GitProjectModel", back_populates="project_authentication_issue" + "GitProjectModel", + back_populates="project_authentication_issue", ) # Check to know if we created an issue for the repo. issue_created = Column(Boolean) @@ -3321,11 +3489,16 @@ class ProjectAuthenticationIssueModel(Base): @classmethod def get_project( - cls, namespace: str, repo_name: str, project_url: str + cls, + namespace: str, + repo_name: str, + project_url: str, ) -> Optional["ProjectAuthenticationIssueModel"]: with sa_session_transaction(commit=True) as session: project = GitProjectModel.get_or_create( - namespace=namespace, repo_name=repo_name, project_url=project_url + namespace=namespace, + repo_name=repo_name, + project_url=project_url, ) return ( session.query(ProjectAuthenticationIssueModel) @@ -3335,11 +3508,17 @@ def get_project( @classmethod def create( - cls, namespace: str, repo_name: str, project_url: str, issue_created: bool + cls, + namespace: str, + repo_name: str, + project_url: str, + issue_created: bool, ) -> "ProjectAuthenticationIssueModel": with sa_session_transaction(commit=True) as session: project = GitProjectModel.get_or_create( - namespace=namespace, repo_name=repo_name, project_url=project_url + namespace=namespace, + repo_name=repo_name, + project_url=project_url, ) project_authentication_issue = cls() @@ -3387,7 +3566,8 @@ def get_by_id(cls, id: int) -> Optional["GithubInstallationModel"]: @classmethod def get_by_account_login( - cls, account_login: str + cls, + account_login: str, ) -> Optional["GithubInstallationModel"]: with sa_session_transaction() as session: return ( @@ -3442,10 +3622,16 @@ class SourceGitPRDistGitPRModel(Base): __tablename__ = "source_git_pr_dist_git_pr" id = Column(Integer, primary_key=True) # our database PK source_git_pull_request_id = Column( - Integer, ForeignKey("pull_requests.id"), unique=True, index=True + Integer, + ForeignKey("pull_requests.id"), + unique=True, + index=True, ) dist_git_pull_request_id = Column( - Integer, ForeignKey("pull_requests.id"), unique=True, index=True + Integer, + ForeignKey("pull_requests.id"), + unique=True, + index=True, ) source_git_pull_request = relationship( "PullRequestModel", @@ -3596,12 +3782,13 @@ def get_by_id(cls, id_: int) -> Optional["VMImageBuildTargetModel"]: def get_all(cls) -> Iterable["VMImageBuildTargetModel"]: with sa_session_transaction() as session: return session.query(VMImageBuildTargetModel).order_by( - desc(VMImageBuildTargetModel.id) + desc(VMImageBuildTargetModel.id), ) @classmethod def get_all_by_build_id( - cls, build_id: Union[str, int] + cls, + build_id: Union[str, int], ) -> Iterable["VMImageBuildTargetModel"]: """Returns all builds with that build_id, irrespective of target""" if isinstance(build_id, int): @@ -3612,7 +3799,8 @@ def get_all_by_build_id( @classmethod def get_all_by_status( - cls, status: VMImageBuildStatus + cls, + status: VMImageBuildStatus, ) -> Iterable["VMImageBuildTargetModel"]: """Returns all builds which currently have the given status.""" with sa_session_transaction() as session: @@ -3620,7 +3808,9 @@ def get_all_by_status( @classmethod def get_by_build_id( - cls, build_id: Union[str, int], target: str = None + cls, + build_id: Union[str, int], + target: str = None, ) -> Optional["VMImageBuildTargetModel"]: """Returns the build matching the build_id and the target""" @@ -3785,7 +3975,9 @@ class SidetagModel(Base): @classmethod @contextmanager def get_or_create_for_updating( - cls, group: "SidetagGroupModel", target: str + cls, + group: "SidetagGroupModel", + target: str, ) -> Generator["SidetagModel", None, None]: """ Context manager that gets or creates a sidetag upon entering the context, @@ -4166,10 +4358,13 @@ def get_usage_data(datetime_from=None, datetime_to=None, top=10) -> dict: datetime_to=datetime_to, ), "top_projects_by_events_handled": GitProjectModel.get_active_projects_usage_numbers( - datetime_from=datetime_from, datetime_to=datetime_to, top=top + datetime_from=datetime_from, + datetime_to=datetime_to, + top=top, ), "instances": GitProjectModel.get_instance_numbers_for_active_projects( - datetime_from=datetime_from, datetime_to=datetime_to + datetime_from=datetime_from, + datetime_to=datetime_to, ), }, "events": { @@ -4205,7 +4400,7 @@ def get_onboarded_projects() -> Tuple[dict[int, str], dict[int, str]]: bodhi_updates = BodhiUpdateTargetModel.get_all_projects() koji_builds = KojiBuildTargetModel.get_all_projects() onboarded_projects = bodhi_updates.union(koji_builds).union( - known_onboarded_projects + known_onboarded_projects, ) # find **downstream git projects** with a PR created by Packit @@ -4215,12 +4410,12 @@ def get_onboarded_projects() -> Tuple[dict[int, str], dict[int, str]]: # (unless we already know it has a koji build or bodhi update, then # we don't need to check for a merged PR - it obviously has one) almost_onboarded_projects = downstream_synced_projects.difference( - onboarded_projects + onboarded_projects, ) # do not re-check projects we already checked and we know they # have a merged Packit PR recheck_if_onboarded = almost_onboarded_projects.difference( - known_onboarded_projects + known_onboarded_projects, ) onboarded = { diff --git a/packit_service/sentry_integration.py b/packit_service/sentry_integration.py index 8bbc9d4f5..ca70c46f9 100644 --- a/packit_service/sentry_integration.py +++ b/packit_service/sentry_integration.py @@ -42,7 +42,7 @@ def configure_sentry( f"Setup sentry for {runner_type}: " f"celery_integration={celery_integration}, " f"flask_integration={flask_integration}, " - f"sqlalchemy_integration={sqlalchemy_integration}" + f"sqlalchemy_integration={sqlalchemy_integration}", ) secret_key = getenv("SENTRY_SECRET") diff --git a/packit_service/service/api/bodhi_updates.py b/packit_service/service/api/bodhi_updates.py index 7005effc6..49b738b41 100644 --- a/packit_service/service/api/bodhi_updates.py +++ b/packit_service/service/api/bodhi_updates.py @@ -93,7 +93,8 @@ def get(self, id): class BodhiUpdateGroup(Resource): @ns.response(HTTPStatus.OK, "OK, Bodhi update group details follow") @ns.response( - HTTPStatus.NOT_FOUND.value, "No info about Bodhi update group stored in DB" + HTTPStatus.NOT_FOUND.value, + "No info about Bodhi update group stored in DB", ) def get(self, id): """A specific Bodhi update group details.""" diff --git a/packit_service/service/api/copr_builds.py b/packit_service/service/api/copr_builds.py index aeec89e8f..befd7b887 100644 --- a/packit_service/service/api/copr_builds.py +++ b/packit_service/service/api/copr_builds.py @@ -52,7 +52,7 @@ def get(self): "status_per_chroot": {}, "packit_id_per_chroot": {}, "build_submitted_time": optional_timestamp( - build_info.build_submitted_time + build_info.build_submitted_time, ), "web_url": build_info.web_url, "ref": build_info.commit_sha, @@ -120,7 +120,8 @@ def get(self, id): class CoprBuildGroup(Resource): @ns.response(HTTPStatus.OK, "OK, copr build group details follow") @ns.response( - HTTPStatus.NOT_FOUND.value, "No info about koji build group stored in DB" + HTTPStatus.NOT_FOUND.value, + "No info about koji build group stored in DB", ) def get(self, id): """A specific test run details.""" diff --git a/packit_service/service/api/koji_builds.py b/packit_service/service/api/koji_builds.py index 4c03aa1b6..456c6ed80 100644 --- a/packit_service/service/api/koji_builds.py +++ b/packit_service/service/api/koji_builds.py @@ -70,7 +70,8 @@ def get(self): class KojiBuildItem(Resource): @koji_builds_ns.response(HTTPStatus.OK, "OK, koji build details follow") @koji_builds_ns.response( - HTTPStatus.NOT_FOUND.value, "No info about build stored in DB" + HTTPStatus.NOT_FOUND.value, + "No info about build stored in DB", ) def get(self, id): """A specific koji build details.""" @@ -109,7 +110,8 @@ def get(self, id): class KojiBuildGroup(Resource): @koji_builds_ns.response(HTTPStatus.OK, "OK, koji build group details follow") @koji_builds_ns.response( - HTTPStatus.NOT_FOUND.value, "No info about koji build group stored in DB" + HTTPStatus.NOT_FOUND.value, + "No info about koji build group stored in DB", ) def get(self, id): """A specific test run details.""" diff --git a/packit_service/service/api/parsers.py b/packit_service/service/api/parsers.py index 0d722d2a9..66c42108a 100644 --- a/packit_service/service/api/parsers.py +++ b/packit_service/service/api/parsers.py @@ -10,7 +10,11 @@ pagination_arguments = reqparse.RequestParser() pagination_arguments.add_argument( - "page", type=int, required=False, default=1, help="Page number" + "page", + type=int, + required=False, + default=1, + help="Page number", ) pagination_arguments.add_argument( "per_page", diff --git a/packit_service/service/api/projects.py b/packit_service/service/api/projects.py index fc87ee9dc..296e0d670 100644 --- a/packit_service/service/api/projects.py +++ b/packit_service/service/api/projects.py @@ -14,7 +14,8 @@ logger = getLogger("packit_service") ns = Namespace( - "projects", description="Repositories which have Packit Service enabled." + "projects", + description="Repositories which have Packit Service enabled.", ) @@ -119,7 +120,10 @@ def get(self, forge, namespace): first, last = indices() for project in GitProjectModel.get_by_forge_namespace( - first, last, forge, namespace + first, + last, + forge, + namespace, ): project_info = { "namespace": project.namespace, @@ -147,7 +151,8 @@ def get(self, forge, namespace): class ProjectsPRs(Resource): @ns.expect(pagination_arguments) @ns.response( - HTTPStatus.PARTIAL_CONTENT.value, "Project PRs handled by Packit Service follow" + HTTPStatus.PARTIAL_CONTENT.value, + "Project PRs handled by Packit Service follow", ) @ns.response(HTTPStatus.OK.value, "OK") def get(self, forge, namespace, repo_name): @@ -157,7 +162,11 @@ def get(self, forge, namespace, repo_name): first, last = indices() for pr in GitProjectModel.get_project_prs( - first, last, forge, namespace, repo_name + first, + last, + forge, + namespace, + repo_name, ): pr_info = { "pr_id": pr.pr_id, @@ -220,7 +229,8 @@ def get(self, forge, namespace, repo_name): class ProjectIssues(Resource): @ns.expect(pagination_arguments) @ns.response( - HTTPStatus.OK.value, "OK, project issues handled by Packit Service follow" + HTTPStatus.OK.value, + "OK, project issues handled by Packit Service follow", ) def get(self, forge, namespace, repo_name): """Project issues""" @@ -229,7 +239,11 @@ def get(self, forge, namespace, repo_name): issues = [ issue.issue_id for issue in GitProjectModel.get_project_issues( - first, last, forge, namespace, repo_name + first, + last, + forge, + namespace, + repo_name, ) ] @@ -249,7 +263,8 @@ def get(self, forge, namespace, repo_name): class ProjectReleases(Resource): @ns.expect(pagination_arguments) @ns.response( - HTTPStatus.OK.value, "OK, project releases handled by Packit Service follow" + HTTPStatus.OK.value, + "OK, project releases handled by Packit Service follow", ) def get(self, forge, namespace, repo_name): """Project releases""" @@ -257,7 +272,11 @@ def get(self, forge, namespace, repo_name): first, last = indices() for release in GitProjectModel.get_project_releases( - first, last, forge, namespace, repo_name + first, + last, + forge, + namespace, + repo_name, ): release_info = { "tag_name": release.tag_name, @@ -281,7 +300,8 @@ def get(self, forge, namespace, repo_name): class ProjectBranches(Resource): @ns.expect(pagination_arguments) @ns.response( - HTTPStatus.OK.value, "OK, project branches handled by Packit Service follow" + HTTPStatus.OK.value, + "OK, project branches handled by Packit Service follow", ) def get(self, forge, namespace, repo_name): """Project branches""" @@ -289,7 +309,11 @@ def get(self, forge, namespace, repo_name): first, last = indices() for branch in GitProjectModel.get_project_branches( - first, last, forge, namespace, repo_name + first, + last, + forge, + namespace, + repo_name, ): branch_info = { "branch": branch.name, diff --git a/packit_service/service/api/propose_downstream.py b/packit_service/service/api/propose_downstream.py index 21c1d6cd8..5a469cd88 100644 --- a/packit_service/service/api/propose_downstream.py +++ b/packit_service/service/api/propose_downstream.py @@ -33,7 +33,9 @@ def get(self): result = [] first, last = indices() for propose_downstream_results in SyncReleaseModel.get_range( - first, last, job_type=SyncReleaseJobType.propose_downstream + first, + last, + job_type=SyncReleaseJobType.propose_downstream, ): result.append(get_sync_release_info(propose_downstream_results)) @@ -46,7 +48,8 @@ def get(self): @ns.param("id", "Packit id of the propose downstream run target") class ProposeResult(Resource): @ns.response( - HTTPStatus.OK.value, "OK, propose downstream target details will follow" + HTTPStatus.OK.value, + "OK, propose downstream target details will follow", ) @ns.response( HTTPStatus.NOT_FOUND.value, diff --git a/packit_service/service/api/pull_from_upstream.py b/packit_service/service/api/pull_from_upstream.py index 74b00cc4d..654d3bdd3 100644 --- a/packit_service/service/api/pull_from_upstream.py +++ b/packit_service/service/api/pull_from_upstream.py @@ -33,7 +33,9 @@ def get(self): result = [] first, last = indices() for pull_results in SyncReleaseModel.get_range( - first, last, job_type=SyncReleaseJobType.pull_from_upstream + first, + last, + job_type=SyncReleaseJobType.pull_from_upstream, ): result.append(get_sync_release_info(pull_results)) @@ -46,7 +48,8 @@ def get(self): @ns.param("id", "Packit id of the pull from upstream run target") class PullResult(Resource): @ns.response( - HTTPStatus.OK.value, "OK, pull from upstream target details will follow" + HTTPStatus.OK.value, + "OK, pull from upstream target details will follow", ) @ns.response( HTTPStatus.NOT_FOUND.value, diff --git a/packit_service/service/api/runs.py b/packit_service/service/api/runs.py index a331e54cb..ad0cecfc8 100644 --- a/packit_service/service/api/runs.py +++ b/packit_service/service/api/runs.py @@ -41,7 +41,7 @@ def _add_sync_release(run: SyncReleaseModel, response_dict: Dict): "packit_id": target.id, "target": target.branch, "status": target.status, - } + }, ) if "trigger" not in response_dict: @@ -55,7 +55,7 @@ def _add_vm_image_build(run: VMImageBuildTargetModel, response_dict: Dict): "packit_id": run.id, "target": run.target, "status": run.status, - } + }, ) if "trigger" not in response_dict: response_dict["time_submitted"] = optional_timestamp(run.build_submitted_time) @@ -98,7 +98,7 @@ def process_runs(runs): "status": srpm_build.status, } response_dict["time_submitted"] = optional_timestamp( - srpm_build.build_submitted_time + srpm_build.build_submitted_time, ) response_dict["trigger"] = get_project_info_from_build(srpm_build) @@ -118,19 +118,20 @@ def process_runs(runs): "packit_id": row.id, "target": row.target, "status": row.status, - } + }, ) if "trigger" not in response_dict: submitted_time = ( row.submitted_time if isinstance( - row, (TFTTestRunTargetModel, BodhiUpdateTargetModel) + row, + (TFTTestRunTargetModel, BodhiUpdateTargetModel), ) else row.build_submitted_time ) response_dict["time_submitted"] = optional_timestamp( - submitted_time + submitted_time, ) response_dict["trigger"] = get_project_info_from_build(row) @@ -143,7 +144,7 @@ def process_runs(runs): # handle VM image builds for vm_image_build_id in set( - flatten_and_remove_none(pipeline.vm_image_build_id) + flatten_and_remove_none(pipeline.vm_image_build_id), ): _add_vm_image_build( VMImageBuildTargetModel.get_by_id(vm_image_build_id), @@ -182,7 +183,8 @@ def get(self, id): return response_maker(result[0]) return response_maker( - {"error": "No run has been found in DB"}, status=HTTPStatus.NOT_FOUND + {"error": "No run has been found in DB"}, + status=HTTPStatus.NOT_FOUND, ) @@ -202,7 +204,7 @@ def get(self, id): result = { "run_id": run.id, "trigger": get_project_info_from_build( - run.srpm_build or run.sync_release_run or run.bodhi_update_group + run.srpm_build or run.sync_release_run or run.bodhi_update_group, ), "srpm_build_id": run.srpm_build_id, "copr_build_group_id": run.copr_build_group_id, diff --git a/packit_service/service/api/testing_farm.py b/packit_service/service/api/testing_farm.py index f7ec525bb..27bf6b9a5 100644 --- a/packit_service/service/api/testing_farm.py +++ b/packit_service/service/api/testing_farm.py @@ -30,7 +30,8 @@ "Testing Farm notification", { "request_id": fields.String( - required=True, example="614d240a-1e27-4758-ad6a-ed3d34281924" + required=True, + example="614d240a-1e27-4758-ad6a-ed3d34281924", ), "token": fields.String(required=True, example="HERE-IS-A-VALID-TOKEN"), }, @@ -176,7 +177,8 @@ def get(self, id): class TestingFarmGroup(Resource): @ns.response(HTTPStatus.OK, "OK, test run group details follow") @ns.response( - HTTPStatus.NOT_FOUND.value, "No info about test run group stored in DB" + HTTPStatus.NOT_FOUND.value, + "No info about test run group stored in DB", ) def get(self, id): """A specific test run details.""" diff --git a/packit_service/service/api/usage.py b/packit_service/service/api/usage.py index dc17d1ab3..1c1a02d3a 100644 --- a/packit_service/service/api/usage.py +++ b/packit_service/service/api/usage.py @@ -299,7 +299,9 @@ def get_project_usage_data(project: str, datetime_from=None, datetime_to=None): events_handled: dict[str, Any] = get_result_dictionary( project=project, top_projects=GitProjectModel.get_active_projects_usage_numbers( - datetime_from=datetime_from, datetime_to=datetime_to, top=None + datetime_from=datetime_from, + datetime_to=datetime_to, + top=None, ), count_name="events_handled", ) @@ -381,7 +383,8 @@ def _get_celery_result(id: str) -> Response: @usage_ns.route("/past-day") class UsagePastDay(Resource): @usage_ns.response( - HTTPStatus.OK, "Provides a url where to wait for Packit last day usage" + HTTPStatus.OK, + "Provides a url where to wait for Packit last day usage", ) def get(self): task = get_past_usage_data.delay(datetime_from=USAGE_PAST_DAY_DATE_STR) @@ -399,7 +402,8 @@ def get(self, id): @usage_ns.route("/past-week") class UsagePastWeek(Resource): @usage_ns.response( - HTTPStatus.OK, "Provides a url where to wait for Packit last week usage" + HTTPStatus.OK, + "Provides a url where to wait for Packit last week usage", ) def get(self): task = get_past_usage_data.delay(datetime_from=USAGE_PAST_WEEK_DATE_STR) @@ -417,7 +421,8 @@ def get(self, id): @usage_ns.route("/past-month") class UsagePastMonth(Resource): @usage_ns.response( - HTTPStatus.OK, "Provides a url where to wait for Packit last month usage" + HTTPStatus.OK, + "Provides a url where to wait for Packit last month usage", ) def get(self): task = get_past_usage_data.delay(datetime_from=USAGE_PAST_MONTH_DATE_STR) @@ -435,7 +440,8 @@ def get(self, id): @usage_ns.route("/past-year") class UsagePastYear(Resource): @usage_ns.response( - HTTPStatus.OK, "Provides a url where to wait for Packit last year usage" + HTTPStatus.OK, + "Provides a url where to wait for Packit last year usage", ) def get(self): task = get_past_usage_data.delay(datetime_from=USAGE_PAST_YEAR_DATE_STR) @@ -453,7 +459,8 @@ def get(self, id): @usage_ns.route("/total") class UsageTotal(Resource): @usage_ns.response( - HTTPStatus.OK, "Provides a url where to wait for Packit total usage data" + HTTPStatus.OK, + "Provides a url where to wait for Packit total usage data", ) def get(self): task = get_past_usage_data.delay(datetime_from=USAGE_DATE_IN_THE_PAST_STR) @@ -485,7 +492,9 @@ def get(self): delta_hours = int(escape(request.args.get("hours", "0"))) delta_days = int(escape(request.args.get("days", "0"))) task = get_usage_interval_data.delay( - hours=delta_hours, days=delta_days, count=count + hours=delta_hours, + days=delta_days, + count=count, ) return redirect(f"intervals/{task.id}", code=302) diff --git a/packit_service/service/api/utils.py b/packit_service/service/api/utils.py index a896c02a4..83a35e457 100644 --- a/packit_service/service/api/utils.py +++ b/packit_service/service/api/utils.py @@ -43,7 +43,7 @@ def get_project_info_from_build( SyncReleaseModel, BodhiUpdateTargetModel, VMImageBuildTargetModel, - ] + ], ) -> Dict[str, Any]: if not (project := build.get_project()): return {} diff --git a/packit_service/service/api/webhooks.py b/packit_service/service/api/webhooks.py index a9dfef12d..27de5ba9e 100644 --- a/packit_service/service/api/webhooks.py +++ b/packit_service/service/api/webhooks.py @@ -57,7 +57,8 @@ class GithubWebhook(Resource): @ns.response(HTTPStatus.OK.value, "Webhook accepted, returning reply") @ns.response( - HTTPStatus.ACCEPTED.value, "Webhook accepted, request is being processed" + HTTPStatus.ACCEPTED.value, + "Webhook accepted, request is being processed", ) @ns.response(HTTPStatus.BAD_REQUEST.value, "Bad request data") @ns.response(HTTPStatus.UNAUTHORIZED.value, "X-Hub-Signature validation failed") @@ -84,13 +85,15 @@ def post(self): except ValidationFailed as exc: logger.info(f"/webhooks/github {exc}") github_webhook_calls.labels( - result="invalid_signature", process_id=os.getpid() + result="invalid_signature", + process_id=os.getpid(), ).inc() return str(exc), HTTPStatus.UNAUTHORIZED if not self.interested(): github_webhook_calls.labels( - result="not_interested", process_id=os.getpid() + result="not_interested", + process_id=os.getpid(), ).inc() return "Thanks but we don't care about this event", HTTPStatus.ACCEPTED @@ -159,7 +162,7 @@ def validate_signature(): msg = "Payload signature validation failed." logger.warning(msg) logger.debug( - f"X-Hub-Signature-256: {signature!r} != computed: {data_hmac.hexdigest()}" + f"X-Hub-Signature-256: {signature!r} != computed: {data_hmac.hexdigest()}", ) raise ValidationFailed(msg) @@ -168,7 +171,8 @@ def validate_signature(): class GitlabWebhook(Resource): @ns.response(HTTPStatus.OK.value, "Webhook accepted, returning reply") @ns.response( - HTTPStatus.ACCEPTED.value, "Webhook accepted, request is being processed" + HTTPStatus.ACCEPTED.value, + "Webhook accepted, request is being processed", ) @ns.response(HTTPStatus.BAD_REQUEST.value, "Bad request data") @ns.response(HTTPStatus.UNAUTHORIZED.value, "X-Gitlab-Token validation failed") @@ -286,7 +290,9 @@ def validate_token(self): try: token_decoded = jwt.decode( - token, config.gitlab_token_secret, algorithms=["HS256"] + token, + config.gitlab_token_secret, + algorithms=["HS256"], ) except ( jwt.exceptions.InvalidSignatureError, diff --git a/packit_service/service/app.py b/packit_service/service/app.py index 1bafe4aeb..028f3781c 100644 --- a/packit_service/service/app.py +++ b/packit_service/service/app.py @@ -63,7 +63,7 @@ def get_flask_application(): logger.addHandler(handler) logger.info( - f"server name = {service_config.server_name}, all HTTP requests need to use this URL!" + f"server name = {service_config.server_name}, all HTTP requests need to use this URL!", ) package_versions = [ diff --git a/packit_service/service/tasks.py b/packit_service/service/tasks.py index 874c855c1..70ff46628 100644 --- a/packit_service/service/tasks.py +++ b/packit_service/service/tasks.py @@ -26,7 +26,9 @@ @celery_app.task(ignore_result=False) def get_usage_interval_data( - days: int, hours: int, count: int + days: int, + hours: int, + count: int, ) -> dict[str, Union[str, CHART_DATA_TYPE, dict[str, CHART_DATA_TYPE]]]: """ :param days: number of days for the interval length @@ -51,14 +53,16 @@ def get_usage_interval_data( result_active_projects_cumulative: CHART_DATA_TYPE = [] logger.warn( - f"Getting usage data datetime_from {USAGE_DATE_IN_THE_PAST} datetime_to {days_legend[-1]}" + f"Getting usage data datetime_from {USAGE_DATE_IN_THE_PAST} datetime_to {days_legend[-1]}", ) past_data = get_usage_data( - datetime_from=USAGE_DATE_IN_THE_PAST, datetime_to=days_legend[-1], top=100000 + datetime_from=USAGE_DATE_IN_THE_PAST, + datetime_to=days_legend[-1], + top=100000, ) logger.warn("Got usage data ") cumulative_projects_past = set( - past_data["active_projects"]["top_projects_by_events_handled"].keys() + past_data["active_projects"]["top_projects_by_events_handled"].keys(), ) cumulative_projects = cumulative_projects_past.copy() cumulative_projects_for_jobs_past = { @@ -73,7 +77,9 @@ def get_usage_interval_data( legend = day.strftime("%H:%M" if (hours and not days) else "%Y-%m-%d") interval_result = get_usage_data( - datetime_from=day_from, datetime_to=day_to, top=100000 + datetime_from=day_from, + datetime_to=day_to, + top=100000, ) for job, data in interval_result["jobs"].items(): @@ -81,13 +87,13 @@ def get_usage_interval_data( result_jobs[job].append({"x": legend, "y": data["job_runs"]}) result_jobs_project_count.setdefault(job, []) result_jobs_project_count[job].append( - {"x": legend, "y": len(data["top_projects_by_job_runs"])} + {"x": legend, "y": len(data["top_projects_by_job_runs"])}, ) cumulative_projects_for_jobs[job] |= data["top_projects_by_job_runs"].keys() result_jobs_project_cumulative_count.setdefault(job, []) result_jobs_project_cumulative_count[job].append( - {"x": legend, "y": len(cumulative_projects_for_jobs[job])} + {"x": legend, "y": len(cumulative_projects_for_jobs[job])}, ) for event, data in interval_result["events"].items(): @@ -95,19 +101,19 @@ def get_usage_interval_data( result_events[event].append({"x": legend, "y": data["events_handled"]}) result_active_projects.append( - {"x": legend, "y": interval_result["active_projects"].get("project_count")} + {"x": legend, "y": interval_result["active_projects"].get("project_count")}, ) cumulative_projects |= interval_result["active_projects"][ "top_projects_by_events_handled" ].keys() result_active_projects_cumulative.append( - {"x": legend, "y": len(cumulative_projects)} + {"x": legend, "y": len(cumulative_projects)}, ) onboarded_projects_per_job = {} for job, _ in past_data["jobs"].items(): onboarded_projects_per_job[job] = list( - cumulative_projects_for_jobs[job] - cumulative_projects_for_jobs_past[job] + cumulative_projects_for_jobs[job] - cumulative_projects_for_jobs_past[job], ) return { @@ -144,7 +150,9 @@ def get_past_usage_data(datetime_from=None, datetime_to=None, top=5): num_of_onboarded_projects = len(onboarded) raw_result = get_usage_data( - datetime_from=datetime_from, datetime_to=datetime_to, top=top_all_project + datetime_from=datetime_from, + datetime_to=datetime_to, + top=top_all_project, ) return { "active_projects": raw_result["active_projects"], @@ -152,7 +160,7 @@ def get_past_usage_data(datetime_from=None, datetime_to=None, top=5): job: { "job_runs": data["job_runs"], "top_projects_by_job_runs": dict( - list(OrderedDict(data["top_projects_by_job_runs"]).items())[:top] + list(OrderedDict(data["top_projects_by_job_runs"]).items())[:top], ), "active_projects": len(data["top_projects_by_job_runs"]), } diff --git a/packit_service/utils.py b/packit_service/utils.py index 3c2041e5a..e093b9d17 100644 --- a/packit_service/utils.py +++ b/packit_service/utils.py @@ -40,7 +40,7 @@ def __call__(self, *args, **kwargs): self.configured = True logger.debug( f"Function {self.func.__name__} called for the first time with " - f"args: {args} and kwargs: {kwargs}" + f"args: {args} and kwargs: {kwargs}", ) return self.func(*args, **kwargs) @@ -80,7 +80,7 @@ def get_package_nvrs(built_packages: List[dict]) -> List[str]: epoch = f"{package['epoch']}:" if package["epoch"] else "" packages.append( - f"{package['name']}-{epoch}{package['version']}-{package['release']}.{package['arch']}" + f"{package['name']}-{epoch}{package['version']}-{package['release']}.{package['arch']}", ) return packages @@ -199,7 +199,8 @@ def elapsed_seconds(begin: datetime, end: datetime) -> float: def get_packit_commands_from_comment( - comment: str, packit_comment_command_prefix: str + comment: str, + packit_comment_command_prefix: str, ) -> List[str]: comment_parts = comment.strip() @@ -250,7 +251,7 @@ def pr_labels_match_configuration( logger.info( f"About to check whether PR labels in PR {pull_request.id} " f"match to the labels configuration " - f"(label.present: {configured_labels_present}, label.absent: {configured_labels_absent})" + f"(label.present: {configured_labels_present}, label.absent: {configured_labels_absent})", ) pr_labels = [label.name for label in pull_request.labels] diff --git a/packit_service/worker/allowlist.py b/packit_service/worker/allowlist.py index 05fa9ba13..20d4b8b71 100644 --- a/packit_service/worker/allowlist.py +++ b/packit_service/worker/allowlist.py @@ -97,7 +97,8 @@ def init_kerberos_ticket(self): try: logger.debug("Initialising Kerberos ticket so that we can use fasjson API.") PackitAPI( - config=self.service_config, package_config=None + config=self.service_config, + package_config=None, ).init_kerberos_ticket() except PackitCommandFailedError as ex: msg = f"Kerberos authentication error: {ex.stderr_output}" @@ -125,7 +126,7 @@ def is_github_username_from_fas_account_matching(self, fas_account, sender_login logger.info( f"Going to check match for Github username from FAS account {fas_account} and" - f" Github account {sender_login}." + f" Github account {sender_login}.", ) client = Client(FASJSON_URL) try: @@ -143,7 +144,7 @@ def is_github_username_from_fas_account_matching(self, fas_account, sender_login github_username = user_info.get("github_username") if github_username: logger.debug( - f"github_username from FAS account {fas_account}: {github_username}" + f"github_username from FAS account {fas_account}: {github_username}", ) return github_username == sender_login @@ -160,7 +161,8 @@ def approve_namespace(namespace: str): `github.com/namespace/repository.git`. """ AllowlistModel.add_namespace( - namespace=namespace, status=AllowlistStatus.approved_manually.value + namespace=namespace, + status=AllowlistStatus.approved_manually.value, ) logger.info(f"Account {namespace!r} approved successfully.") @@ -367,7 +369,8 @@ def _check_pr_event( logger.debug(msg) if isinstance( - event, (PullRequestCommentGithubEvent, MergeRequestCommentGitlabEvent) + event, + (PullRequestCommentGithubEvent, MergeRequestCommentGitlabEvent), ): project.get_pr(event.pr_id).comment(msg) else: @@ -381,7 +384,12 @@ def _check_pr_event( return False def _check_pr_report_status( - self, job_configs, event, project, user_or_project_denied, short_msg + self, + job_configs, + event, + project, + user_or_project_denied, + short_msg, ): for job_config in job_configs: job_helper_kls: Type[Union[TestingFarmJobHelper, CoprBuildJobHelper]] @@ -393,7 +401,7 @@ def _check_pr_report_status( job_helper = job_helper_kls( service_config=self.service_config, package_config=event.get_packages_config().get_package_config_for( - job_config + job_config, ), project=project, metadata=EventData.from_event_dict(event.get_dict()), @@ -411,11 +419,11 @@ def _check_pr_report_status( markdown_content = NAMESPACE_NOT_ALLOWED_MARKDOWN_DESCRIPTION.format( instructions=( NAMESPACE_NOT_ALLOWED_MARKDOWN_ISSUE_INSTRUCTIONS.format( - issue_url=issue_url + issue_url=issue_url, ) if issue_url else "" - ) + ), ) job_helper.report_status_to_configured_job( description=short_msg, @@ -473,7 +481,8 @@ def check_and_report( :return: """ CALLBACKS: Dict[ - Union[type, Tuple[Union[type, Tuple[Any, ...]], ...]], Callable + Union[type, Tuple[Union[type, Tuple[Any, ...]], ...]], + Callable, ] = { ( # events that are not checked against allowlist PushPagureEvent, @@ -510,7 +519,9 @@ def check_and_report( # Administrators user_login = getattr( # some old events with user_login can still be there - event, "user_login", None + event, + "user_login", + None, ) or getattr(event, "actor", None) if user_login and user_login in self.service_config.admins: @@ -527,7 +538,7 @@ def check_and_report( def get_approval_issue(self, namespace) -> Optional[str]: for issue in self.service_config.get_project( - url=NOTIFICATION_REPO + url=NOTIFICATION_REPO, ).get_issue_list(author=self.service_config.get_github_account_name()): if issue.title.strip().endswith(f" {namespace} needs to be approved."): return issue.url diff --git a/packit_service/worker/checker/bodhi.py b/packit_service/worker/checker/bodhi.py index 84bdd786f..b8917b097 100644 --- a/packit_service/worker/checker/bodhi.py +++ b/packit_service/worker/checker/bodhi.py @@ -53,7 +53,7 @@ def pre_check(self) -> bool: logger.debug( f"Skipping build '{koji_build_data.build_id}' " f"on '{koji_build_data.dist_git_branch}'. " - f"Build not finished yet." + f"Build not finished yet.", ) return False @@ -65,7 +65,7 @@ def pre_check(self) -> bool: ): logger.info( f"Skipping build on '{koji_build_data.dist_git_branch}'. " - f"Bodhi update configured only for '{configured_branches}'." + f"Bodhi update configured only for '{configured_branches}'.", ) return False @@ -87,7 +87,7 @@ def pre_check(self) -> bool: ).check_allowed_accounts(): logger.info( f"Owner of the build ({owner}) does not match the " - f"configuration: {configured_builders}" + f"configuration: {configured_builders}", ) return False @@ -108,7 +108,8 @@ class IsKojiBuildCompleteAndBranchConfiguredCheckSidetag( class IsKojiBuildCompleteAndBranchConfiguredCheckService( - IsKojiBuildCompleteAndBranchConfigured, GetKojiBuildDataFromKojiServiceMixin + IsKojiBuildCompleteAndBranchConfigured, + GetKojiBuildDataFromKojiServiceMixin, ): ... @@ -126,7 +127,7 @@ def _pre_check(self) -> bool: logger.debug( f"Re-triggering Bodhi update through comment in " f"repo {self.project_url} and issue {self.data.issue_id} " - f"by {self.actor}." + f"by {self.actor}.", ) if not has_write_access: msg = ( @@ -151,7 +152,7 @@ def _pre_check(self) -> bool: logger.debug( f"Re-triggering Bodhi update via dist-git comment in " f"repo {self.project_url} and #PR {self.data.pr_id} " - f"by {self.actor}." + f"by {self.actor}.", ) if not has_write_access: msg = ( diff --git a/packit_service/worker/checker/copr.py b/packit_service/worker/checker/copr.py index e9964da68..5e6d34ddd 100644 --- a/packit_service/worker/checker/copr.py +++ b/packit_service/worker/checker/copr.py @@ -26,14 +26,18 @@ class IsJobConfigTriggerMatching( - Checker, ConfigFromEventMixin, GetCoprBuildJobHelperMixin + Checker, + ConfigFromEventMixin, + GetCoprBuildJobHelperMixin, ): def pre_check(self) -> bool: return self.copr_build_helper.is_job_config_trigger_matching(self.job_config) class IsGitForgeProjectAndEventOk( - Checker, ConfigFromEventMixin, GetCoprBuildJobHelperMixin + Checker, + ConfigFromEventMixin, + GetCoprBuildJobHelperMixin, ): def pre_check( self, @@ -55,7 +59,7 @@ def pre_check( if self.copr_build_helper.is_custom_copr_project_defined(): logger.debug( "Custom Copr owner/project set. " - "Checking if this GitHub project can use this Copr project." + "Checking if this GitHub project can use this Copr project.", ) if not self.copr_build_helper.check_if_custom_copr_can_be_used_and_report(): return False @@ -74,7 +78,7 @@ def pre_check(self) -> bool: logger.debug( f"The Copr project {self.copr_event.owner}/{self.copr_event.project_name} " f"does not match the configuration " - f"({self.copr_build_helper.job_owner}/{self.copr_build_helper.job_project} expected)." + f"({self.copr_build_helper.job_owner}/{self.copr_build_helper.job_project} expected).", ) return False @@ -94,7 +98,7 @@ def pre_check(self) -> bool: logger.debug( f"The Copr build {self.copr_event.build_id} (pkg={build_for_package}) " f"does not match the package from the configuration " - f"({self.job_config.package})." + f"({self.job_config.package}).", ) return False @@ -108,7 +112,9 @@ def pre_check(self) -> bool: class CanActorRunTestsJob( - ActorChecker, ConfigFromEventMixin, GetCoprBuildJobHelperMixin + ActorChecker, + ConfigFromEventMixin, + GetCoprBuildJobHelperMixin, ): """For external contributors, we need to be more careful when running jobs. This is a handler-specific permission check @@ -128,11 +134,11 @@ def _pre_check(self) -> bool: ): self.copr_build_helper.report_status_to_build( description=INTERNAL_TF_BUILDS_AND_TESTS_NOT_ALLOWED[0].format( - actor=self.actor + actor=self.actor, ), state=BaseCommitStatus.neutral, markdown_content=INTERNAL_TF_BUILDS_AND_TESTS_NOT_ALLOWED[1].format( - packit_comment_command_prefix=self.service_config.comment_command_prefix + packit_comment_command_prefix=self.service_config.comment_command_prefix, ), ) return False diff --git a/packit_service/worker/checker/distgit.py b/packit_service/worker/checker/distgit.py index 1df36cf19..a3727502e 100644 --- a/packit_service/worker/checker/distgit.py +++ b/packit_service/worker/checker/distgit.py @@ -59,7 +59,7 @@ def pre_check(self) -> bool: ): logger.info( f"Skipping build on '{self.data.git_ref}'. " - f"Koji build configured only for '{configured_branches}'." + f"Koji build configured only for '{configured_branches}'.", ) return False @@ -75,12 +75,12 @@ def pre_check(self) -> bool: logger.info( f"Push event {self.data.identifier} with corresponding PR created by" f" {pr_author} that is not allowed in project " - f"configuration: {self.job_config.allowed_pr_authors}." + f"configuration: {self.job_config.allowed_pr_authors}.", ) return False else: logger.debug( - "Not able to get the pull request, we are handling direct push." + "Not able to get the pull request, we are handling direct push.", ) committer = self.data.event_dict["committer"] logger.debug(f"Committer: {committer}") @@ -92,19 +92,20 @@ def pre_check(self) -> bool: logger.info( f"Push event {self.data.identifier} done by " f"{committer} that is not allowed in project " - f"configuration: {self.job_config.allowed_committers}." + f"configuration: {self.job_config.allowed_committers}.", ) return False elif self.data.event_type in (PullRequestCommentPagureEvent.__name__,): comment = self.data.event_dict.get("comment", "") commands = get_packit_commands_from_comment( - comment, self.service_config.comment_command_prefix + comment, + self.service_config.comment_command_prefix, ) command = commands[0] if commands else "" commenter = self.data.actor logger.debug( f"{'Tagging' if command == 'koji-tag' else 'Triggering'} " - f"downstream koji build through comment by: {commenter}" + f"downstream koji build through comment by: {commenter}", ) if not self.is_packager(commenter): msg = ( @@ -142,7 +143,7 @@ def _pre_check(self) -> bool: logger.debug( f"Re-triggering downstream koji-build through comment in " f"repo {self.project.repo} and issue {self.data.issue_id} " - f"by {self.actor}." + f"by {self.actor}.", ) if not self.project.has_write_access(user=self.actor): msg = ( @@ -227,7 +228,7 @@ def pre_check(self) -> bool: if self.data.event_type in (PullRequestCommentPagureEvent.__name__,): commenter = self.data.actor logger.debug( - f"Triggering pull-from-upstream through comment by: {commenter}" + f"Triggering pull-from-upstream through comment by: {commenter}", ) if not self.is_packager(commenter): msg_to_report = ( @@ -267,7 +268,7 @@ def pre_check(self) -> bool: if not matching_include_regex: logger.info( f"Tag {tag} doesn't match the upstream_tag_include {upstream_tag_include} " - f"from the config. Skipping the syncing." + f"from the config. Skipping the syncing.", ) return False @@ -276,7 +277,7 @@ def pre_check(self) -> bool: if matching_exclude_regex: logger.info( f"Tag {tag} matches the upstream_tag_exclude {upstream_tag_exclude} " - f"from the config. Skipping the syncing." + f"from the config. Skipping the syncing.", ) return False diff --git a/packit_service/worker/checker/forges.py b/packit_service/worker/checker/forges.py index cabb9442f..88d81ee37 100644 --- a/packit_service/worker/checker/forges.py +++ b/packit_service/worker/checker/forges.py @@ -18,7 +18,8 @@ def pre_check(self) -> bool: self.project.namespace == "packit" and self.project.repo == "notifications" ): logger.debug( - "Packit verification comment command not placed in packit/notifications repository." + "Packit verification comment command not placed" + "in packit/notifications repository.", ) return False @@ -26,7 +27,7 @@ def pre_check(self) -> bool: if issue_author != self.service_config.get_github_account_name(): logger.debug( f"Packit verification comment command placed on issue with author " - f"other than our app: {issue_author}" + f"other than our app: {issue_author}", ) return False diff --git a/packit_service/worker/checker/helper.py b/packit_service/worker/checker/helper.py index 65e89c76a..825efeb7a 100644 --- a/packit_service/worker/checker/helper.py +++ b/packit_service/worker/checker/helper.py @@ -15,7 +15,10 @@ class DistgitAllowedAccountsAlias(Enum): class DistgitAccountsChecker: def __init__( - self, project: GitProject, accounts_list: list[str], account_to_check: str + self, + project: GitProject, + accounts_list: list[str], + account_to_check: str, ): self.project = project self.accounts_list = accounts_list @@ -31,7 +34,7 @@ def check_allowed_accounts(self) -> bool: (considering the groups and aliases). """ logger.info( - f"Checking {self.account_to_check} in list of accounts: {self.accounts_list}" + f"Checking {self.account_to_check} in list of accounts: {self.accounts_list}", ) direct_account_names = [ @@ -58,7 +61,7 @@ def check_allowed_accounts(self) -> bool: all_accounts.update(group.members) except Exception as ex: logger.debug( - f"Exception while getting the members of group {value}: {ex!r}" + f"Exception while getting the members of group {value}: {ex!r}", ) continue else: diff --git a/packit_service/worker/checker/testing_farm.py b/packit_service/worker/checker/testing_farm.py index 515bb0569..8465d2a67 100644 --- a/packit_service/worker/checker/testing_farm.py +++ b/packit_service/worker/checker/testing_farm.py @@ -27,12 +27,15 @@ class IsJobConfigTriggerMatching(Checker, GetTestingFarmJobHelperMixin): def pre_check(self) -> bool: return self.testing_farm_job_helper.is_job_config_trigger_matching( - self.job_config + self.job_config, ) class IsEventOk( - Checker, GetTestingFarmJobHelperMixin, GetCoprBuildMixin, GetGithubCommentEventMixin + Checker, + GetTestingFarmJobHelperMixin, + GetCoprBuildMixin, + GetGithubCommentEventMixin, ): def pre_check(self) -> bool: if ( @@ -57,7 +60,7 @@ def pre_check(self) -> bool: logger.debug( f"Skipping reporting, identifiers don't match " f"(identifier of the test job to report: {self.data.identifier}, " - f"identifier from job config: {self.job_config.identifier})." + f"identifier from job config: {self.job_config.identifier}).", ) return False return True @@ -93,7 +96,7 @@ def _pre_check(self) -> bool: description=message[0].format(actor=self.actor), state=BaseCommitStatus.neutral, markdown_content=message[1].format( - packit_comment_command_prefix=self.service_config.comment_command_prefix + packit_comment_command_prefix=self.service_config.comment_command_prefix, ), ) return False @@ -113,7 +116,7 @@ def pre_check(self) -> bool: ): logger.info( "Build required and no build job found in the configuration, " - "reporting and skipping." + "reporting and skipping.", ) self.testing_farm_job_helper.report_status_to_tests( description="Test job requires build job definition in the configuration.", @@ -143,7 +146,7 @@ def pre_check(self) -> bool: and (default_identifier := self.job_config.test_command.default_identifier) ): logger.info( - f"Using the default identifier for test command: {default_identifier}" + f"Using the default identifier for test command: {default_identifier}", ) return self.job_config.identifier == default_identifier @@ -157,7 +160,7 @@ def pre_check(self) -> bool: logger.info( f"Skipping running tests for the job, identifiers doesn't match " f"(job:{self.job_config.identifier} " - f"!= comment:${self.testing_farm_job_helper.comment_arguments.identifier})" + f"!= comment:${self.testing_farm_job_helper.comment_arguments.identifier})", ) return False @@ -193,6 +196,6 @@ def pre_check(self) -> bool: logger.info( f"Skipping running tests for the job, labels don't match " f"(job:{self.job_config.labels} " - f"!= comment:${self.testing_farm_job_helper.comment_arguments.labels})" + f"!= comment:${self.testing_farm_job_helper.comment_arguments.labels})", ) return False diff --git a/packit_service/worker/database.py b/packit_service/worker/database.py index c2982b5f3..a893fc584 100644 --- a/packit_service/worker/database.py +++ b/packit_service/worker/database.py @@ -27,13 +27,14 @@ def discard_old_srpm_build_logs(): """Called periodically (see celery_config.py) to discard logs of old SRPM builds.""" logger.info("About to discard old SRPM build logs & artifact urls.") outdated_after_days = getenv( - "SRPMBUILDS_OUTDATED_AFTER_DAYS", SRPMBUILDS_OUTDATED_AFTER_DAYS + "SRPMBUILDS_OUTDATED_AFTER_DAYS", + SRPMBUILDS_OUTDATED_AFTER_DAYS, ) ago = timedelta(days=int(outdated_after_days)) for build in SRPMBuildModel.get_older_than(ago): logger.debug( f"SRPM build {build.id} is older than '{ago}'. " - "Discarding log and artifact url." + "Discarding log and artifact url.", ) build.set_logs(None) build.set_url(None) @@ -43,13 +44,14 @@ def discard_old_package_configs(): """Called periodically (see celery_config.py) to discard package configs of old events.""" logger.info("About to discard old package configs.") outdated_after_days = getenv( - "PACKAGE_CONFIGS_OUTDATED_AFTER_DAYS", PACKAGE_CONFIGS_OUTDATED_AFTER_DAYS + "PACKAGE_CONFIGS_OUTDATED_AFTER_DAYS", + PACKAGE_CONFIGS_OUTDATED_AFTER_DAYS, ) ago = timedelta(days=int(outdated_after_days)) for event in ProjectEventModel.get_older_than_with_packages_config(ago): logger.debug( f"ProjectEventModel {event.id} has all runs older than '{ago}'. " - "Discarding package config." + "Discarding package config.", ) event.set_packages_config(None) @@ -77,7 +79,8 @@ def gzip_file(file: Path) -> Path: def upload_to_s3( - file: Path, bucket: str = f"arr-packit-{getenv('DEPLOYMENT', 'dev')}" + file: Path, + bucket: str = f"arr-packit-{getenv('DEPLOYMENT', 'dev')}", ) -> None: """Upload a file to an S3 bucket. diff --git a/packit_service/worker/events/comment.py b/packit_service/worker/events/comment.py index 9c18daa38..4af87d132 100644 --- a/packit_service/worker/events/comment.py +++ b/packit_service/worker/events/comment.py @@ -88,7 +88,7 @@ def build_targets_override(self) -> Optional[Set[str]]: if not self._build_targets_override and "rebuild-failed" in self.comment: self._build_targets_override = ( super().get_all_build_targets_by_status( - statuses_to_filter_with=[BuildStatus.failure] + statuses_to_filter_with=[BuildStatus.failure], ) or None ) @@ -102,7 +102,7 @@ def tests_targets_override(self) -> Optional[Set[str]]: statuses_to_filter_with=[ TestingFarmResult.failed, TestingFarmResult.error, - ] + ], ) or None ) diff --git a/packit_service/worker/events/copr.py b/packit_service/worker/events/copr.py index 3a0537f08..1dec59cce 100644 --- a/packit_service/worker/events/copr.py +++ b/packit_service/worker/events/copr.py @@ -107,12 +107,20 @@ def from_build_id( if not build: logger.warning( f"Build id {build_id} not in " - f"{'SRPMBuildDB' if chroot == COPR_SRPM_CHROOT else 'CoprBuildDB'}." + f"{'SRPMBuildDB' if chroot == COPR_SRPM_CHROOT else 'CoprBuildDB'}.", ) return None return cls( - topic, build_id, build, chroot, status, owner, project_name, pkg, timestamp + topic, + build_id, + build, + chroot, + status, + owner, + project_name, + pkg, + timestamp, ) @classmethod diff --git a/packit_service/worker/events/event.py b/packit_service/worker/events/event.py index 747000c5a..851f7f263 100644 --- a/packit_service/worker/events/event.py +++ b/packit_service/worker/events/event.py @@ -292,7 +292,7 @@ def _add_project_object_and_event(self): ) else: logger.warning( - "We don't know, what to search in the database for this event data." + "We don't know, what to search in the database for this event data.", ) @property @@ -464,7 +464,7 @@ def job_config_trigger_type(self) -> Optional[JobConfigTriggerType]: return job_config_trigger_type if not self.db_project_object: logger.warning( - f"Event {self} does not have a matching object in the database." + f"Event {self} does not have a matching object in the database.", ) return None return self.db_project_object.job_config_trigger_type @@ -585,7 +585,7 @@ def get_project(self) -> Optional[GitProject]: return None return ServiceConfig.get_service_config().get_project( - url=self.project_url or self.db_project_object.project.project_url + url=self.project_url or self.db_project_object.project.project_url, ) def get_base_project(self) -> Optional[GitProject]: @@ -598,7 +598,7 @@ def get_packages_config(self) -> Optional[PackageConfig]: f"\tproject: {self.project}\n" f"\tbase_project: {self.base_project}\n" f"\treference: {self.commit_sha}\n" - f"\tpr_id: {self.pr_id}" + f"\tpr_id: {self.pr_id}", ) packages_config = PackageConfigGetter.get_package_config_from_repo( @@ -612,29 +612,31 @@ def get_packages_config(self) -> Optional[PackageConfig]: return packages_config def get_all_tf_targets_by_status( - self, statuses_to_filter_with: List[str] + self, + statuses_to_filter_with: List[str], ) -> Optional[Set[str]]: if self.commit_sha is None: return None logger.debug( - f"Getting failed Testing Farm targets for commit sha: {self.commit_sha}" + f"Getting failed Testing Farm targets for commit sha: {self.commit_sha}", ) return filter_most_recent_target_names_by_status( models=TFTTestRunTargetModel.get_all_by_commit_target( - commit_sha=self.commit_sha + commit_sha=self.commit_sha, ), statuses_to_filter_with=statuses_to_filter_with, ) def get_all_build_targets_by_status( - self, statuses_to_filter_with: List[str] + self, + statuses_to_filter_with: List[str], ) -> Optional[Set[str]]: if self.commit_sha is None or self.project.repo is None: return None logger.debug( - f"Getting failed COPR build targets for commit sha: {self.commit_sha}" + f"Getting failed COPR build targets for commit sha: {self.commit_sha}", ) return filter_most_recent_target_names_by_status( models=CoprBuildTargetModel.get_all_by_commit(commit_sha=self.commit_sha), diff --git a/packit_service/worker/events/github.py b/packit_service/worker/events/github.py index b803edb8e..bae9d498c 100644 --- a/packit_service/worker/events/github.py +++ b/packit_service/worker/events/github.py @@ -45,7 +45,11 @@ def __init__(self, project_url: str, pr_id: Optional[int] = None, **kwargs): class ReleaseEvent(AddReleaseEventToDb, AbstractGithubEvent): def __init__( - self, repo_namespace: str, repo_name: str, tag_name: str, project_url: str + self, + repo_namespace: str, + repo_name: str, + tag_name: str, + project_url: str, ): super().__init__(project_url=project_url) self.repo_namespace = repo_namespace diff --git a/packit_service/worker/events/koji.py b/packit_service/worker/events/koji.py index 0a3ea8914..39d6dd0c2 100644 --- a/packit_service/worker/events/koji.py +++ b/packit_service/worker/events/koji.py @@ -49,7 +49,7 @@ def __init__( def build_model(self) -> Optional[KojiBuildTargetModel]: if not self._build_model_searched and not self._build_model: self._build_model = KojiBuildTargetModel.get_by_task_id( - task_id=self.task_id + task_id=self.task_id, ) self._build_model_searched = True return self._build_model @@ -162,7 +162,7 @@ def get_packages_config(self) -> Optional[PackageConfig]: logger.debug( f"Getting packages_config:\n" f"\tproject: {self.project}\n" - f"\tdefault_branch: {self.project.default_branch}\n" + f"\tdefault_branch: {self.project.default_branch}\n", ) packages_config = PackageConfigGetter.get_package_config_from_repo( diff --git a/packit_service/worker/events/new_hotness.py b/packit_service/worker/events/new_hotness.py index 20c9a8db0..29be22c99 100644 --- a/packit_service/worker/events/new_hotness.py +++ b/packit_service/worker/events/new_hotness.py @@ -53,7 +53,7 @@ def get_project(self) -> Optional[GitProject]: return None return ServiceConfig.get_service_config().get_project( - url=self.distgit_project_url + url=self.distgit_project_url, ) @property @@ -81,7 +81,7 @@ def _add_release_and_event(self): and self.project_url ): logger.info( - "Not going to create the DB project event, not valid arguments." + "Not going to create the DB project event, not valid arguments.", ) return None diff --git a/packit_service/worker/events/pagure.py b/packit_service/worker/events/pagure.py index 16fc3f6f4..3e5060fcd 100644 --- a/packit_service/worker/events/pagure.py +++ b/packit_service/worker/events/pagure.py @@ -37,7 +37,7 @@ def get_packages_config(self) -> Optional[PackageConfig]: logger.debug( f"Getting packages_config:\n" f"\tproject: {self.project}\n" - f"\tdefault_branch: {self.project.default_branch}\n" + f"\tdefault_branch: {self.project.default_branch}\n", ) packages_config = PackageConfigGetter.get_package_config_from_repo( @@ -130,7 +130,8 @@ def get_base_project(self) -> GitProject: def get_packages_config(self) -> Optional[PackageConfig]: comment = self.__dict__["comment"] commands = get_packit_commands_from_comment( - comment, ServiceConfig.get_service_config().comment_command_prefix + comment, + ServiceConfig.get_service_config().comment_command_prefix, ) if not commands: return super().get_packages_config() @@ -144,7 +145,7 @@ def get_packages_config(self) -> Optional[PackageConfig]: f"\tproject: {self.project}\n" f"\tbase_project: {self.base_project}\n" f"\treference: {self.commit_sha}\n" - f"\tpr_id: {self.pr_id}" + f"\tpr_id: {self.pr_id}", ) packages_config = PackageConfigGetter.get_package_config_from_repo( base_project=self.base_project, @@ -158,7 +159,7 @@ def get_packages_config(self) -> Optional[PackageConfig]: logger.debug( f"Getting packages_config:\n" f"\tproject: {self.project}\n" - f"\tdefault_branch: {self.base_project.default_branch}\n" + f"\tdefault_branch: {self.base_project.default_branch}\n", ) packages_config = PackageConfigGetter.get_package_config_from_repo( base_project=None, @@ -174,9 +175,11 @@ def get_packages_config(self) -> Optional[PackageConfig]: def repo_url(self) -> Optional[RepoUrl]: if not self._repo_url: self._repo_url = RepoUrl.parse( - self.packages_config.upstream_project_url - if self.packages_config - else None + ( + self.packages_config.upstream_project_url + if self.packages_config + else None + ), ) return self._repo_url diff --git a/packit_service/worker/events/testing_farm.py b/packit_service/worker/events/testing_farm.py index 4391f24e7..e59614e58 100644 --- a/packit_service/worker/events/testing_farm.py +++ b/packit_service/worker/events/testing_farm.py @@ -63,13 +63,13 @@ def get_dict(self, default_dict: Optional[Dict] = None) -> dict: def get_db_project_object(self) -> Optional[AbstractProjectObjectDbType]: run_model = TFTTestRunTargetModel.get_by_pipeline_id( - pipeline_id=self.pipeline_id + pipeline_id=self.pipeline_id, ) return run_model.get_project_event_object() if run_model else None def get_db_project_event(self) -> Optional[ProjectEventModel]: run_model = TFTTestRunTargetModel.get_by_pipeline_id( - pipeline_id=self.pipeline_id + pipeline_id=self.pipeline_id, ) return run_model.get_project_event_model() if run_model else None diff --git a/packit_service/worker/handlers/abstract.py b/packit_service/worker/handlers/abstract.py index d3f3915f2..9001fef2f 100644 --- a/packit_service/worker/handlers/abstract.py +++ b/packit_service/worker/handlers/abstract.py @@ -41,7 +41,7 @@ MAP_JOB_TYPE_TO_HANDLER: Dict[JobType, Set[Type["JobHandler"]]] = defaultdict(set) MAP_REQUIRED_JOB_TYPE_TO_HANDLER: Dict[JobType, Set[Type["JobHandler"]]] = defaultdict( - set + set, ) SUPPORTED_EVENTS_FOR_HANDLER: Dict[Type["JobHandler"], Set[Type["Event"]]] = ( defaultdict(set) @@ -207,7 +207,7 @@ def get_tag_info(self) -> dict: { "repository": self.project.repo, "namespace": self.project.namespace, - } + }, ) if "package_name" in self.data.event_dict: tags.update({"package_name": self.data.event_dict["package_name"]}) @@ -235,7 +235,7 @@ def _clean_workplace(self): # Do not clean dir if does not exist if not p.is_dir(): logger.debug( - f"Directory {self.service_config.command_handler_work_dir!r} does not exist." + f"Directory {self.service_config.command_handler_work_dir!r} does not exist.", ) return @@ -360,9 +360,11 @@ def get_signature(cls, event: Event, job: Optional[JobConfig]) -> Signature: cls.task_name.value, kwargs={ "package_config": dump_package_config( - event.packages_config.get_package_config_for(job) - if event.packages_config - else None + ( + event.packages_config.get_package_config_for(job) + if event.packages_config + else None + ), ), "job_config": dump_job_config(job), "event": event.get_dict(), @@ -382,7 +384,9 @@ def __init__( celery_task: Task, ): super().__init__( - package_config=package_config, job_config=job_config, event=event + package_config=package_config, + job_config=job_config, + event=event, ) self.celery_task = CeleryTask(celery_task) diff --git a/packit_service/worker/handlers/bodhi.py b/packit_service/worker/handlers/bodhi.py index aeb4a2669..3a666731f 100644 --- a/packit_service/worker/handlers/bodhi.py +++ b/packit_service/worker/handlers/bodhi.py @@ -74,7 +74,9 @@ class BodhiUpdateHandler( - RetriableJobHandler, PackitAPIWithDownstreamMixin, GetKojiBuildData + RetriableJobHandler, + PackitAPIWithDownstreamMixin, + GetKojiBuildData, ): topic = "org.fedoraproject.prod.buildsys.build.state.change" @@ -108,7 +110,7 @@ def run(self) -> TaskResults: if target_model.sidetag: # get update alias from previous run(s) from the same sidetag (if any) if model := BodhiUpdateTargetModel.get_first_successful_by_sidetag( - target_model.sidetag + target_model.sidetag, ): existing_alias = model.alias @@ -124,7 +126,7 @@ def run(self) -> TaskResults: f" from sidetag: {target_model.sidetag}." if target_model.sidetag else "." - ) + ), ) result = self.packit_api.create_update( dist_git_branch=target_model.target, @@ -154,17 +156,17 @@ def run(self) -> TaskResults: model.set_status("retry") logger.debug( - "Celery task will be retried. User will not be notified about the failure." + "Celery task will be retried. User will not be notified about the failure.", ) retry_backoff = int( - getenv("CELERY_RETRY_BACKOFF", DEFAULT_RETRY_BACKOFF) + getenv("CELERY_RETRY_BACKOFF", DEFAULT_RETRY_BACKOFF), ) delay = retry_backoff * 2**self.celery_task.retries self.celery_task.task.retry(exc=ex, countdown=delay, kwargs=kargs) return TaskResults( success=True, details={ - "msg": f"There was an error: {ex}. Task will be retried." + "msg": f"There was an error: {ex}. Task will be retried.", }, ) else: @@ -200,7 +202,8 @@ def _get_or_create_bodhi_update_group_model(self) -> BodhiUpdateGroupModel: return BodhiUpdateGroupModel.get_by_id(self._bodhi_update_group_model_id) run_model = PipelineModel.create( - self.data.db_project_event, package_name=self.get_package_name() + self.data.db_project_event, + package_name=self.get_package_name(), ) group = BodhiUpdateGroupModel.create(run_model) @@ -208,18 +211,19 @@ def _get_or_create_bodhi_update_group_model(self) -> BodhiUpdateGroupModel: sidetag = builds = None if self.job_config.sidetag_group: sidetag = SidetagHelper.get_sidetag( - self.job_config.sidetag_group, koji_build_data.dist_git_branch + self.job_config.sidetag_group, + koji_build_data.dist_git_branch, ) # check if dependencies are satisfied within the sidetag dependencies = set(self.job_config.dependencies or []) dependencies.add( - self.job_config.downstream_package_name # include self + self.job_config.downstream_package_name, # include self ) if missing_dependencies := sidetag.get_missing_dependencies( - dependencies + dependencies, ): raise PackitException( - f"Missing dependencies for Bodhi update: {missing_dependencies}" + f"Missing dependencies for Bodhi update: {missing_dependencies}", ) builds = " ".join( str(b) for b in sidetag.get_builds_suitable_for_update(dependencies) @@ -252,7 +256,8 @@ def get_handler_specific_task_accepted_message( def report_in_issue_repository(self, errors: dict[str, str]) -> None: body = MSG_DOWNSTREAM_JOB_ERROR_HEADER.format( - object="Bodhi update", dist_git_url=self.packit_api.dg.local_project.git_url + object="Bodhi update", + dist_git_url=self.packit_api.dg.local_project.git_url, ) for branch, ex in errors.items(): body += ( @@ -275,7 +280,8 @@ def report_in_issue_repository(self, errors: dict[str, str]) -> None: ) body_msg = update_message_with_configured_failure_comment_message( - body_msg, self.job_config + body_msg, + self.job_config, ) report_in_issue_repository( @@ -327,7 +333,7 @@ def _get_or_create_bodhi_update_group_model(self) -> BodhiUpdateGroupModel: group = None for koji_build_data in self: koji_build_target = KojiBuildTargetModel.get_by_task_id( - koji_build_data.task_id + koji_build_data.task_id, ) if koji_build_target: run_model = koji_build_target.group_of_targets.runs[-1] @@ -335,7 +341,8 @@ def _get_or_create_bodhi_update_group_model(self) -> BodhiUpdateGroupModel: # but let's cover the case else: run_model = PipelineModel.create( - self.data.db_project_event, package_name=self.get_package_name() + self.data.db_project_event, + package_name=self.get_package_name(), ) group = BodhiUpdateGroupModel.create(run_model) @@ -382,7 +389,8 @@ def get_trigger_type_description(self) -> str: @reacts_to(event=PullRequestCommentPagureEvent) @run_for_comment(command="create-update") class RetriggerBodhiUpdateHandler( - BodhiUpdateHandler, GetKojiBuildDataFromKojiServiceMixin + BodhiUpdateHandler, + GetKojiBuildDataFromKojiServiceMixin, ): """ This handler can re-trigger a bodhi update if any successful Koji build. diff --git a/packit_service/worker/handlers/copr.py b/packit_service/worker/handlers/copr.py index 4c800f3ad..0c4942b65 100644 --- a/packit_service/worker/handlers/copr.py +++ b/packit_service/worker/handlers/copr.py @@ -252,7 +252,7 @@ def set_srpm_url(self) -> None: return srpm_url = self.copr_build_helper.get_build( - self.copr_event.build_id + self.copr_event.build_id, ).source_package.get("url") if srpm_url is not None: @@ -269,7 +269,8 @@ def set_end_time(self): def measure_time_after_reporting(self): reported_time = datetime.now(timezone.utc) build_ended_on = self.copr_build_helper.get_build_chroot( - int(self.build.build_id), self.build.target + int(self.build.build_id), + self.build.target, ).ended_on reported_after_time = elapsed_seconds( @@ -277,7 +278,7 @@ def measure_time_after_reporting(self): end=reported_time, ) logger.debug( - f"Copr build end reported after {reported_after_time / 60} minutes." + f"Copr build end reported after {reported_after_time / 60} minutes.", ) self.pushgateway.copr_build_end_reported_after_time.observe(reported_after_time) @@ -288,7 +289,8 @@ def set_built_packages(self): return built_packages = self.copr_build_helper.get_built_packages( - int(self.build.build_id), self.build.target + int(self.build.build_id), + self.build.target, ) self.build.set_built_packages(built_packages) @@ -326,7 +328,8 @@ def run(self): # if the build is needed only for test, it doesn't have the task_accepted_time if self.build.task_accepted_time: copr_build_time = elapsed_seconds( - begin=self.build.task_accepted_time, end=datetime.now(timezone.utc) + begin=self.build.task_accepted_time, + end=datetime.now(timezone.utc), ) self.pushgateway.copr_build_finished_time.observe(copr_build_time) @@ -373,7 +376,7 @@ def run(self): sentry_integration.send_to_sentry(ex) logger.debug( f"Handling the scan raised an exception: {ex}. Skipping " - f"as this is only experimental functionality for now." + f"as this is only experimental functionality for now.", ) return TaskResults(success=True, details={}) @@ -397,7 +400,8 @@ def report_successful_build(self): "\nPlease note that the RPMs should be used only in a testing environment." ) self.copr_build_helper.status_reporter.comment( - msg, duplicate_check=DuplicateCheckMode.check_last_comment + msg, + duplicate_check=DuplicateCheckMode.check_last_comment, ) url = get_copr_build_info_url(self.build.id) @@ -433,12 +437,13 @@ def handle_srpm_end(self): ) self.build.set_status(BuildStatus.failure) self.copr_build_helper.monitor_not_submitted_copr_builds( - len(self.copr_build_helper.build_targets), "srpm_failure" + len(self.copr_build_helper.build_targets), + "srpm_failure", ) return TaskResults(success=False, details={"msg": failed_msg}) for build in CoprBuildTargetModel.get_all_by_build_id( - str(self.copr_event.build_id) + str(self.copr_event.build_id), ): # from waiting_for_srpm to pending build.set_status(BuildStatus.pending) @@ -488,8 +493,9 @@ def handle_testing_farm(self): ): event_dict["tests_targets_override"] = list( self.copr_build_helper.build_target2test_targets_for_test_job( - self.copr_event.chroot, job_config - ) + self.copr_event.chroot, + job_config, + ), ) signature( TaskName.testing_farm.value, diff --git a/packit_service/worker/handlers/distgit.py b/packit_service/worker/handlers/distgit.py index c851f59d7..b3818a816 100644 --- a/packit_service/worker/handlers/distgit.py +++ b/packit_service/worker/handlers/distgit.py @@ -242,7 +242,9 @@ def sync_release_helper(self) -> SyncReleaseHelper: return self.helper def sync_branch( - self, branch: str, model: SyncReleaseModel + self, + branch: str, + model: SyncReleaseModel, ) -> Optional[PullRequest]: try: branch_suffix = f"update-{self.sync_release_job_type.value}" @@ -258,14 +260,14 @@ def sync_branch( "add_pr_instructions": True, "resolved_bugs": self.get_resolved_bugs(), "release_monitoring_project_id": self.data.event_dict.get( - "anitya_project_id" + "anitya_project_id", ), "sync_acls": True, "pr_description_footer": DistgitAnnouncement.get_announcement(), # [TODO] Remove for CentOS support once it gets refined "add_new_sources": self.package_config.pkg_tool in (None, "fedpkg"), "fast_forward_merge_branches": self.helper.get_fast_forward_merge_branches_for( - branch + branch, ), } if not self.packit_api.non_git_upstream: @@ -299,7 +301,7 @@ def sync_branch( delay = 60 * 2**retries logger.info( f"Will retry for the {retries + 1}. time in {delay}s \ - with sync_release_run_id {model.id}." + with sync_release_run_id {model.id}.", ) # throw=False so that exception is not raised and task # is not retried also automatically @@ -320,7 +322,9 @@ def sync_branch( finally: if self.packit_api.up.local_project: self.packit_api.up.local_project.git_repo.head.reset( - "HEAD", index=True, working_tree=True + "HEAD", + index=True, + working_tree=True, ) return downstream_pr @@ -342,14 +346,17 @@ def _get_or_create_sync_release_run(self) -> SyncReleaseModel: for branch in self.sync_release_helper.branches: sync_release_target = SyncReleaseTargetModel.create( - status=SyncReleaseTargetStatus.queued, branch=branch + status=SyncReleaseTargetStatus.queued, + branch=branch, ) sync_release_model.sync_release_targets.append(sync_release_target) return sync_release_model def run_for_target( - self, sync_release_run_model: SyncReleaseModel, model: SyncReleaseTargetModel + self, + sync_release_run_model: SyncReleaseModel, + model: SyncReleaseTargetModel, ) -> Optional[str]: """ Run sync-release for the single target specified by the given model. @@ -374,7 +381,7 @@ def run_for_target( ]: logger.debug( f"Skipping {self.sync_release_job_type} for branch {branch} " - f"that was already processed." + f"that was already processed.", ) return None @@ -395,7 +402,8 @@ def run_for_target( try: downstream_pr = self.sync_branch( - branch=branch, model=sync_release_run_model + branch=branch, + model=sync_release_run_model, ) logger.debug("Downstream PR created successfully.") model.set_downstream_pr_url(downstream_pr_url=downstream_pr.url) @@ -435,7 +443,9 @@ def run_for_target( dashboard_url = self.get_dashboard_url(model.id) self.report_dashboard_url( - sync_release_pull_request, downstream_pr, dashboard_url + sync_release_pull_request, + downstream_pr, + dashboard_url, ) self.sync_release_helper.report_status_for_branch( branch=branch, @@ -467,7 +477,7 @@ def run(self) -> TaskResults: except AbortSyncRelease: logger.debug( f"{self.sync_release_job_type} is being retried because " - "we were not able yet to download the archive. " + "we were not able yet to download the archive. ", ) for model in sync_release_run_model.sync_release_targets: @@ -612,7 +622,8 @@ def _report_errors_for_each_branch(self, message: str) -> None: body_msg = f"{message}{msg_retrigger}\n" body_msg = update_message_with_configured_failure_comment_message( - body_msg, self.job_config + body_msg, + self.job_config, ) PackageConfigGetter.create_issue_if_needed( @@ -688,7 +699,8 @@ def get_resolved_bugs(self) -> List[str]: comment = self.data.event_dict.get("comment") commands = get_packit_commands_from_comment( - comment, self.service_config.comment_command_prefix + comment, + self.service_config.comment_command_prefix, ) args = commands[1:] if len(commands) > 1 else "" bugs_keyword = "--resolve-bug" @@ -708,10 +720,12 @@ def _report_errors_for_each_branch(self, message: str) -> None: f"need some help.*\n" ) long_message = update_message_with_configured_failure_comment_message( - body_msg, self.job_config + body_msg, + self.job_config, ) short_message = update_message_with_configured_failure_comment_message( - message, self.job_config + message, + self.job_config, ) report_in_issue_repository( issue_repository=self.job_config.issue_repository, @@ -782,7 +796,7 @@ def _get_or_create_koji_group_model(self) -> KojiBuildGroupModel: run_model=PipelineModel.create( project_event=self.data.db_project_event, package_name=self.get_package_name(), - ) + ), ) for branch in self.get_branches(): @@ -816,7 +830,7 @@ def is_already_triggered(self, branch: str) -> bool: KojiBuildState.complete, ): logger.debug( - f"Koji build with matching NVR ({nvr}) found with state {state}" + f"Koji build with matching NVR ({nvr}) found with state {state}", ) return True @@ -833,14 +847,14 @@ def run(self) -> TaskResults: if koji_build_model.status not in ["queued", "pending", "retry"]: logger.debug( f"Skipping downstream Koji build for branch {branch} " - f"that was already processed." + f"that was already processed.", ) continue if not self.job_config.scratch and self.is_already_triggered(branch): logger.info( f"Skipping downstream Koji build for branch {branch} " - f"that was already triggered." + f"that was already triggered.", ) koji_build_model.set_status("skipped") continue @@ -854,17 +868,18 @@ def run(self) -> TaskResults: # we need Kerberos ticket to create a new sidetag self.packit_api.init_kerberos_ticket() sidetag = SidetagHelper.get_or_create_sidetag( - self.job_config.sidetag_group, branch + self.job_config.sidetag_group, + branch, ) # skip submitting build for a branch if dependencies # are not satisfied within a sidetag dependencies = set(self.job_config.dependencies or []) if missing_dependencies := sidetag.get_missing_dependencies( - dependencies + dependencies, ): logger.debug( f"Skipping downstream Koji build for branch {branch}, " - f"missing dependencies: {missing_dependencies}" + f"missing dependencies: {missing_dependencies}", ) koji_build_model.set_status("skipped") continue @@ -888,17 +903,17 @@ def run(self) -> TaskResults: model.set_status("retry") logger.debug( - "Celery task will be retried. User will not be notified about the failure." + "Celery task will be retried. User will not be notified about the failure.", ) retry_backoff = int( - getenv("CELERY_RETRY_BACKOFF", DEFAULT_RETRY_BACKOFF) + getenv("CELERY_RETRY_BACKOFF", DEFAULT_RETRY_BACKOFF), ) delay = retry_backoff * 2**self.celery_task.retries self.celery_task.task.retry(exc=ex, countdown=delay, kwargs=kargs) return TaskResults( success=True, details={ - "msg": f"There was an error: {ex}. Task will be retried." + "msg": f"There was an error: {ex}. Task will be retried.", }, ) error = str(ex) @@ -918,7 +933,8 @@ def get_trigger_type_description(self) -> str: def report_in_issue_repository(self, errors: dict[str, str]) -> None: body = MSG_DOWNSTREAM_JOB_ERROR_HEADER.format( - object="Koji build", dist_git_url=self.packit_api.dg.local_project.git_url + object="Koji build", + dist_git_url=self.packit_api.dg.local_project.git_url, ) for branch, ex in errors.items(): body += ( @@ -941,7 +957,8 @@ def report_in_issue_repository(self, errors: dict[str, str]) -> None: f"{body}\n{trigger_type_description}\n\n{msg_retrigger}{MSG_GET_IN_TOUCH}\n" ) body_msg = update_message_with_configured_failure_comment_message( - body_msg, self.job_config + body_msg, + self.job_config, ) report_in_issue_repository( @@ -1096,11 +1113,12 @@ def run_for_branch(self, package: str, sidetag_group: str, branch: str) -> None: def run(self) -> TaskResults: comment = self.data.event_dict.get("comment") commands = get_packit_commands_from_comment( - comment, self.service_config.comment_command_prefix + comment, + self.service_config.comment_command_prefix, ) args = commands[1:] if len(commands) > 1 else "" packages_to_tag: Dict[str, Dict[str, Set[str]]] = defaultdict( - partial(defaultdict, set) + partial(defaultdict, set), ) for job in self.package_config.get_job_views(): if ( @@ -1109,7 +1127,8 @@ def run(self) -> TaskResults: and job.dist_git_branches ): configured_branches = aliases.get_branches( - *job.dist_git_branches, default_dg_branch="rawhide" + *job.dist_git_branches, + default_dg_branch="rawhide", ) if "--all-branches" in args: branches = configured_branches @@ -1124,7 +1143,7 @@ def run(self) -> TaskResults: for sidetag_group, branches in sidetag_groups.items(): logger.debug( f"Running downstream Koji build tagging of {package} " - f"for {branches} in {sidetag_group}" + f"for {branches} in {sidetag_group}", ) for branch in branches: self.run_for_branch(package, sidetag_group, branch) diff --git a/packit_service/worker/handlers/forges.py b/packit_service/worker/handlers/forges.py index b22cf432a..6c988eb0f 100644 --- a/packit_service/worker/handlers/forges.py +++ b/packit_service/worker/handlers/forges.py @@ -42,7 +42,9 @@ @reacts_to(event=InstallationEvent) class GithubAppInstallationHandler( - JobHandler, ConfigFromEventMixin, PackitAPIWithDownstreamMixin + JobHandler, + ConfigFromEventMixin, + PackitAPIWithDownstreamMixin, ): task_name = TaskName.installation @@ -76,7 +78,7 @@ def run(self) -> TaskResults: Result of the run task. """ previous_installation = GithubInstallationModel.get_by_account_login( - self.installation_event.account_login + self.installation_event.account_login, ) previous_sender_login = ( previous_installation.sender_login if previous_installation else None @@ -96,7 +98,8 @@ def run(self) -> TaskResults: and previous_sender_login != self.sender_login ): if allowlist.is_github_username_from_fas_account_matching( - fas_account=self.sender_login, sender_login=self.sender_login + fas_account=self.sender_login, + sender_login=self.sender_login, ): AllowlistModel.add_namespace( namespace, @@ -153,7 +156,9 @@ def run(self) -> TaskResults: @reacts_to(event=IssueCommentEvent) class GithubFasVerificationHandler( - JobHandler, PackitAPIWithDownstreamMixin, GetIssueMixin + JobHandler, + PackitAPIWithDownstreamMixin, + GetIssueMixin, ): task_name = TaskName.github_fas_verification @@ -185,24 +190,25 @@ def run(self) -> TaskResults: """ logger.debug( f"Going to run verification of FAS account triggered by comment:" - f" {self.comment}" + f" {self.comment}", ) # e.g. User Bebaabeni needs to be approved. _, account_login, _ = self.issue.title.split(maxsplit=2) original_sender_login = GithubInstallationModel.get_by_account_login( - account_login + account_login, ).sender_login logger.debug(f"Original sender login: {original_sender_login}") namespace = f"github.com/{account_login}" command_parts = get_packit_commands_from_comment( - self.comment, self.service_config.comment_command_prefix + self.comment, + self.service_config.comment_command_prefix, ) # we expect ["verify-fas", "fas-account"] if len(command_parts) != 2: msg = "Incorrect format of the Packit verification comment command." logger.debug(msg) self.issue.comment( - f"{msg} The expected format: `/packit verify-fas my-fas-account`" + f"{msg} The expected format: `/packit verify-fas my-fas-account`", ) return TaskResults(success=False, details={"msg": msg}) @@ -236,7 +242,8 @@ def verify(self, namespace: str, fas_account: str) -> TaskResults: return TaskResults(success=True, details={"msg": msg}) if allowlist.is_github_username_from_fas_account_matching( - fas_account=fas_account, sender_login=self.sender_login + fas_account=fas_account, + sender_login=self.sender_login, ): msg = ( f"Namespace `{namespace}` approved successfully " @@ -248,13 +255,15 @@ def verify(self, namespace: str, fas_account: str) -> TaskResults: # store the fas account in the DB for the namespace AllowlistModel.add_namespace( - namespace, AllowlistStatus.approved_automatically.value, fas_account + namespace, + AllowlistStatus.approved_automatically.value, + fas_account, ) else: logger.debug( f"No match between FAS account `{fas_account}` " - f"and GitHub user `{self.sender_login}` found." + f"and GitHub user `{self.sender_login}` found.", ) msg = ( f"We were not able to find a match between the GitHub Username field " diff --git a/packit_service/worker/handlers/koji.py b/packit_service/worker/handlers/koji.py index 6bd001d0b..7203e11af 100644 --- a/packit_service/worker/handlers/koji.py +++ b/packit_service/worker/handlers/koji.py @@ -95,7 +95,9 @@ @reacts_to(CheckRerunCommitEvent) @reacts_to(CheckRerunReleaseEvent) class KojiBuildHandler( - JobHandler, PackitAPIWithDownstreamMixin, GetKojiBuildJobHelperMixin + JobHandler, + PackitAPIWithDownstreamMixin, + GetKojiBuildJobHelperMixin, ): task_name = TaskName.upstream_koji_build @@ -130,12 +132,17 @@ def run(self) -> TaskResults: @configured_as(job_type=JobType.upstream_koji_build) @reacts_to(event=KojiTaskEvent) class KojiTaskReportHandler( - JobHandler, PackitAPIWithDownstreamMixin, ConfigFromEventMixin + JobHandler, + PackitAPIWithDownstreamMixin, + ConfigFromEventMixin, ): task_name = TaskName.upstream_koji_build_report def __init__( - self, package_config: PackageConfig, job_config: JobConfig, event: dict + self, + package_config: PackageConfig, + job_config: JobConfig, + event: dict, ): super().__init__( package_config=package_config, @@ -151,7 +158,7 @@ def __init__( def build(self) -> Optional[KojiBuildTargetModel]: if not self._build: self._build = KojiBuildTargetModel.get_by_task_id( - task_id=str(self.koji_task_event.task_id) + task_id=str(self.koji_task_event.task_id), ) return self._build @@ -163,7 +170,7 @@ def db_project_event(self) -> Optional[ProjectEventModel]: def run(self): build = KojiBuildTargetModel.get_by_task_id( - task_id=str(self.koji_task_event.task_id) + task_id=str(self.koji_task_event.task_id), ) if not build: @@ -173,19 +180,23 @@ def run(self): logger.debug( f"Build on {build.target} in koji changed state " - f"from {self.koji_task_event.old_state} to {self.koji_task_event.state}." + f"from {self.koji_task_event.old_state} to {self.koji_task_event.state}.", ) build.set_build_start_time( - datetime.utcfromtimestamp(self.koji_task_event.start_time) - if self.koji_task_event.start_time - else None + ( + datetime.utcfromtimestamp(self.koji_task_event.start_time) + if self.koji_task_event.start_time + else None + ), ) build.set_build_finished_time( - datetime.utcfromtimestamp(self.koji_task_event.completion_time) - if self.koji_task_event.completion_time - else None + ( + datetime.utcfromtimestamp(self.koji_task_event.completion_time) + if self.koji_task_event.completion_time + else None + ), ) url = get_koji_build_info_url(build.id) @@ -218,15 +229,16 @@ def run(self): if not (new_commit_status and description): logger.debug( - f"We don't react to this koji build state change: {self.koji_task_event.state}" + f"We don't react to this koji build state change: {self.koji_task_event.state}", ) elif new_commit_status.value == build.status: logger.debug( "Status was already processed (status in the DB is the " - "same as the one about to report)" + "same as the one about to report)", ) return TaskResults( - success=True, details={"msg": "State change already processed"} + success=True, + details={"msg": "State change already processed"}, ) else: @@ -238,7 +250,7 @@ def run(self): chroot=build.target, ) koji_build_logs = self.koji_task_event.get_koji_build_rpm_tasks_logs_urls( - self.service_config.koji_logs_url + self.service_config.koji_logs_url, ) build.set_build_logs_urls(koji_build_logs) @@ -266,12 +278,17 @@ def run(self): @configured_as(job_type=JobType.bodhi_update) @reacts_to(event=KojiBuildEvent) class KojiBuildReportHandler( - JobHandler, PackitAPIWithDownstreamMixin, ConfigFromEventMixin + JobHandler, + PackitAPIWithDownstreamMixin, + ConfigFromEventMixin, ): task_name = TaskName.downstream_koji_build_report def __init__( - self, package_config: PackageConfig, job_config: JobConfig, event: dict + self, + package_config: PackageConfig, + job_config: JobConfig, + event: dict, ): super().__init__( package_config=package_config, @@ -286,7 +303,7 @@ def __init__( def build(self) -> Optional[KojiBuildTargetModel]: if not self._build: self._build = KojiBuildTargetModel.get_by_task_id( - task_id=self.koji_build_event.task_id + task_id=self.koji_build_event.task_id, ) return self._build @@ -312,15 +329,19 @@ def run(self): logger.debug(msg) self.build.set_build_start_time( - datetime.fromisoformat(self.koji_build_event.start_time) - if self.koji_build_event.start_time - else None + ( + datetime.fromisoformat(self.koji_build_event.start_time) + if self.koji_build_event.start_time + else None + ), ) self.build.set_build_finished_time( - datetime.fromisoformat(self.koji_build_event.completion_time) - if self.koji_build_event.completion_time - else None + ( + datetime.fromisoformat(self.koji_build_event.completion_time) + if self.koji_build_event.completion_time + else None + ), ) new_commit_status = { @@ -345,13 +366,13 @@ def run(self): logger.warning( f"We should not overwrite the final state {self.build.status} " f"to {new_commit_status}. " - f"Not updating the status." + f"Not updating the status.", ) elif new_commit_status: self.build.set_status(new_commit_status.value) else: logger.debug( - f"We don't react to this koji build state change: {self.koji_task_event.state}" + f"We don't react to this koji build state change: {self.koji_task_event.state}", ) if not self.build.web_url: @@ -359,11 +380,11 @@ def run(self): KojiBuildEvent.get_koji_rpm_build_web_url( rpm_build_task_id=self.koji_build_event.task_id, koji_web_url=self.service_config.koji_web_url, - ) + ), ) koji_build_logs = self.koji_build_event.get_koji_build_rpm_tasks_logs_urls( - self.service_config.koji_logs_url + self.service_config.koji_logs_url, ) self.build.set_build_logs_urls(koji_build_logs) @@ -373,7 +394,9 @@ def run(self): @configured_as(job_type=JobType.koji_build_tag) @reacts_to(event=KojiBuildTagEvent) class KojiBuildTagHandler( - JobHandler, ConfigFromEventMixin, PackitAPIWithDownstreamMixin + JobHandler, + ConfigFromEventMixin, + PackitAPIWithDownstreamMixin, ): task_name = TaskName.koji_build_tag @@ -400,7 +423,7 @@ def run(self) -> TaskResults: ) if not packages_config: logger.debug( - f"Packit config not found for package {package_name}, skipping." + f"Packit config not found for package {package_name}, skipping.", ) continue for job in packages_config.get_job_views(): @@ -430,7 +453,7 @@ def run(self) -> TaskResults: ) if not packages_config: logger.debug( - f"Packit config not found for package {package_name}, skipping." + f"Packit config not found for package {package_name}, skipping.", ) continue for job in packages_config.get_job_views(): @@ -448,7 +471,9 @@ def run(self) -> TaskResults: else BodhiUpdateFromSidetagHandler ) if not handler.pre_check( - package_config=packages_config, job_config=job, event=event_dict + package_config=packages_config, + job_config=job, + event=event_dict, ): continue signature( diff --git a/packit_service/worker/handlers/mixin.py b/packit_service/worker/handlers/mixin.py index 1c7343684..903345d3d 100644 --- a/packit_service/worker/handlers/mixin.py +++ b/packit_service/worker/handlers/mixin.py @@ -52,7 +52,7 @@ class GetKojiBuildEventMixin(ConfigFromEventMixin, GetKojiBuildEvent): def koji_build_event(self): if not self._koji_build_event: self._koji_build_event = KojiBuildEvent.from_event_dict( - self.data.event_dict + self.data.event_dict, ) return self._koji_build_event @@ -180,7 +180,8 @@ def num_of_branches(self): class GetKojiBuildDataFromKojiBuildTagEventMixin( - ConfigFromEventMixin, GetKojiBuildData + ConfigFromEventMixin, + GetKojiBuildData, ): _koji_build_tag_event: Optional[KojiBuildTagEvent] = None _sidetag: Optional[Sidetag] = None @@ -189,7 +190,7 @@ class GetKojiBuildDataFromKojiBuildTagEventMixin( def koji_build_tag_event(self) -> KojiBuildTagEvent: if not self._koji_build_tag_event: self._koji_build_tag_event = KojiBuildTagEvent.from_event_dict( - self.data.event_dict + self.data.event_dict, ) return self._koji_build_tag_event @@ -197,7 +198,7 @@ def koji_build_tag_event(self) -> KojiBuildTagEvent: def sidetag(self) -> Optional[Sidetag]: if not self._sidetag: self._sidetag = SidetagHelper.get_sidetag_by_koji_name( - self.koji_build_tag_event.tag_name + self.koji_build_tag_event.tag_name, ) return self._sidetag @@ -243,12 +244,13 @@ def koji_helper(self) -> KojiHelper: def _get_latest_build(self) -> dict: if not ( build := self.koji_helper.get_latest_candidate_build( - self.project.repo, self._dist_git_branch + self.project.repo, + self._dist_git_branch, ) ): raise PackitException( f"No build found for package={self.project.repo} " - f"and branch={self._dist_git_branch}" + f"and branch={self._dist_git_branch}", ) return build @@ -276,7 +278,8 @@ def _task_id(self) -> int: class GetKojiBuildDataFromKojiServiceMixin( - ConfigFromEventMixin, GetKojiBuildDataFromKojiService + ConfigFromEventMixin, + GetKojiBuildDataFromKojiService, ): @property def _dist_git_branch(self) -> str: @@ -288,7 +291,8 @@ def num_of_branches(self): class GetKojiBuildDataFromKojiServiceMultipleBranches( - GetKojiBuildDataFromKojiService, GetBranches + GetKojiBuildDataFromKojiService, + GetBranches, ): @property def _dist_git_branch(self) -> str: @@ -319,7 +323,7 @@ class GetCoprBuildEventMixin(ConfigFromEventMixin, GetCoprBuildEvent): def copr_event(self): if not self._copr_build_event: self._copr_build_event = AbstractCoprBuildEvent.from_event_dict( - self.data.event_dict + self.data.event_dict, ) return self._copr_build_event @@ -346,7 +350,8 @@ def build(self): self._build = SRPMBuildModel.get_by_copr_build_id(build_id) else: self._build = CoprBuildTargetModel.get_by_build_id( - build_id, self.copr_event.chroot + build_id, + self.copr_event.chroot, ) return self._build @@ -415,7 +420,9 @@ def copr_build_helper(self) -> CoprBuildJobHelper: class GetCoprBuildJobHelperForIdMixin( - GetCoprBuildJobHelper, GetCoprSRPMBuildMixin, ConfigFromEventMixin + GetCoprBuildJobHelper, + GetCoprSRPMBuildMixin, + ConfigFromEventMixin, ): _copr_build_helper: Optional[CoprBuildJobHelper] = None @@ -426,7 +433,7 @@ def copr_build_helper(self) -> CoprBuildJobHelper: { build.target for build in CoprBuildTargetModel.get_all_by_build_id( - str(self.copr_event.build_id) + str(self.copr_event.build_id), ) } if self.copr_event.chroot == COPR_SRPM_CHROOT @@ -457,7 +464,9 @@ def testing_farm_job_helper(self) -> TestingFarmJobHelper: ... class GetTestingFarmJobHelperMixin( - GetTestingFarmJobHelper, GetCoprBuildMixin, ConfigFromEventMixin + GetTestingFarmJobHelper, + GetCoprBuildMixin, + ConfigFromEventMixin, ): _testing_farm_job_helper: Optional[TestingFarmJobHelper] = None @@ -530,7 +539,8 @@ def dg_branch(self) -> str: def project_to_sync(self) -> Optional[ProjectToSync]: if self._project_to_sync is None: if project_to_sync := self.service_config.get_project_to_sync( - dg_repo_name=self.dg_repo_name, dg_branch=self.dg_branch + dg_repo_name=self.dg_repo_name, + dg_branch=self.dg_branch, ): self._project_to_sync = project_to_sync return self._project_to_sync @@ -583,7 +593,7 @@ class GetVMImageBuilderMixin(Config): def vm_image_builder(self): if not self._vm_image_builder: self._vm_image_builder = ImageBuilder( - self.service_config.redhat_api_refresh_token + self.service_config.redhat_api_refresh_token, ) return self._vm_image_builder diff --git a/packit_service/worker/handlers/testing_farm.py b/packit_service/worker/handlers/testing_farm.py index 36d5f4582..f57390403 100644 --- a/packit_service/worker/handlers/testing_farm.py +++ b/packit_service/worker/handlers/testing_farm.py @@ -132,7 +132,8 @@ def get_checkers() -> Tuple[Type[Checker], ...]: ) def _get_or_create_group( - self, builds: Dict[str, CoprBuildTargetModel] + self, + builds: Dict[str, CoprBuildTargetModel], ) -> Tuple[TFTTestRunGroupModel, List[TFTTestRunTargetModel]]: """Creates a TFTTestRunGroup. @@ -182,7 +183,7 @@ def _get_or_create_group( # In _payload() we ask TF to test commit_sha of fork (PR's source). # Store original url. If this proves to work, make it a separate column. data={"base_project_url": self.project.get_web_url()}, - ) + ), ) return group, runs @@ -197,7 +198,8 @@ def run_with_copr_builds(self, targets: List[str], failed: Dict): copr_build = CoprBuildTargetModel.get_by_id(self.build_id) else: copr_build = self.testing_farm_job_helper.get_latest_copr_build( - target=chroot, commit_sha=self.data.commit_sha + target=chroot, + commit_sha=self.data.commit_sha, ) if copr_build and copr_build.status not in ( @@ -214,7 +216,7 @@ def run_with_copr_builds(self, targets: List[str], failed: Dict): f"Missing successful Copr build for targets {targets_without_successful_builds} in " f"{self.testing_farm_job_helper.job_owner}/" f"{self.testing_farm_job_helper.job_project}" - f" and commit:{self.data.commit_sha}, tests won't be triggered for the target." + f" and commit:{self.data.commit_sha}, tests won't be triggered for the target.", ) for missing_target in targets_without_successful_builds: @@ -275,7 +277,8 @@ def run_for_target( if self.celery_task.retries == 0: self.pushgateway.test_runs_queued.inc() result = self.testing_farm_job_helper.run_testing_farm( - test_run=test_run, build=build + test_run=test_run, + build=build, ) if not result["success"]: failed[test_run.target] = result.get("details") @@ -303,7 +306,7 @@ def run(self) -> TaskResults: if self.testing_farm_job_helper.skip_build: group, test_runs = self._get_or_create_group( - {target: None for target in targets} + {target: None for target in targets}, ) for test_run in test_runs: # Only retry what's needed @@ -365,7 +368,7 @@ def get_checkers() -> Tuple[Type[Checker], ...]: def db_project_event(self) -> Optional[ProjectEventModel]: if not self._db_project_event: run_model = TFTTestRunTargetModel.get_by_pipeline_id( - pipeline_id=self.pipeline_id + pipeline_id=self.pipeline_id, ) if run_model: self._db_project_event = run_model.get_project_event_model() @@ -375,7 +378,7 @@ def run(self) -> TaskResults: logger.debug(f"Testing farm {self.pipeline_id} result:\n{self.result}") test_run_model = TFTTestRunTargetModel.get_by_pipeline_id( - pipeline_id=self.pipeline_id + pipeline_id=self.pipeline_id, ) if not test_run_model: msg = f"Unknown pipeline_id received from the testing-farm: {self.pipeline_id}" @@ -385,10 +388,11 @@ def run(self) -> TaskResults: if test_run_model.status == self.result: logger.debug( "Testing farm results already processed " - "(state in the DB is the same as the one about to report)." + "(state in the DB is the same as the one about to report).", ) return TaskResults( - success=True, details={"msg": "Testing farm results already processed"} + success=True, + details={"msg": "Testing farm results already processed"}, ) failure = False @@ -414,7 +418,8 @@ def run(self) -> TaskResults: else: self.pushgateway.test_runs_finished.inc() test_run_time = elapsed_seconds( - begin=test_run_model.submitted_time, end=datetime.now(timezone.utc) + begin=test_run_model.submitted_time, + end=datetime.now(timezone.utc), ) self.pushgateway.test_run_finished_time.observe(test_run_time) diff --git a/packit_service/worker/handlers/vm_image.py b/packit_service/worker/handlers/vm_image.py index 9ba295960..2a7502bb2 100644 --- a/packit_service/worker/handlers/vm_image.py +++ b/packit_service/worker/handlers/vm_image.py @@ -73,7 +73,7 @@ def run(self) -> TaskResults: return TaskResults( success=False, details={ - "msg": f"Job configuration not found for project {self.project.repo}" + "msg": f"Job configuration not found for project {self.project.repo}", }, ) @@ -141,7 +141,7 @@ def run(self) -> TaskResults: if model.status == status: logger.debug( "Status was already processed (status in the DB is the same " - "as the one about to report)" + "as the one about to report)", ) return TaskResults( success=True, diff --git a/packit_service/worker/helpers/sidetag.py b/packit_service/worker/helpers/sidetag.py index d803c79b7..8b3eb81c5 100644 --- a/packit_service/worker/helpers/sidetag.py +++ b/packit_service/worker/helpers/sidetag.py @@ -45,13 +45,14 @@ def get_builds_suitable_for_update(self, dependencies: Set[str]) -> Set[NEVR]: for package in dependencies: latest_build = max(b for b in builds if b.name == package) latest_stable_nvr = self.koji_helper.get_latest_stable_nvr( - package, self.dist_git_branch + package, + self.dist_git_branch, ) # exclude NVRs that are already in stable tags - if a build # has been manually tagged into the sidetag to satisfy dependencies, # we don't want it in the update if not latest_stable_nvr or latest_build > NEVR.from_string( - latest_stable_nvr + latest_stable_nvr, ): result.add(latest_build) return result @@ -62,7 +63,8 @@ def tag_build(self, nvr: NEVR) -> None: def tag_latest_stable_build(self, package: str) -> None: latest_stable_nvr = self.koji_helper.get_latest_stable_nvr( - package, self.dist_git_branch + package, + self.dist_git_branch, ) if not latest_stable_nvr: logger.debug(f"Failed to find the latest stable build of {package}") @@ -99,11 +101,11 @@ def get_sidetag(cls, sidetag_group: str, dist_git_branch: str) -> Sidetag: group = SidetagGroupModel.get_or_create(sidetag_group) if not (sidetag := group.get_sidetag_by_target(dist_git_branch)): raise PackitException( - f"Sidetag for {sidetag_group} and {dist_git_branch} was not found in the database" + f"Sidetag for {sidetag_group} and {dist_git_branch} was not found in the database", ) if not cls.koji_helper.get_tag_info(sidetag.koji_name): raise PackitException( - f"Sidetag {sidetag.koji_name} no longer exists in Koji" + f"Sidetag {sidetag.koji_name} no longer exists in Koji", ) return Sidetag(sidetag, cls.koji_helper) @@ -149,12 +151,12 @@ def get_or_create_sidetag(cls, sidetag_group: str, dist_git_branch: str) -> Side group = SidetagGroupModel.get_or_create(sidetag_group) with SidetagModel.get_or_create_for_updating(group, dist_git_branch) as sidetag: if not sidetag.koji_name or not cls.koji_helper.get_tag_info( - sidetag.koji_name + sidetag.koji_name, ): tag_info = cls.koji_helper.create_sidetag(dist_git_branch) if not tag_info: raise PackitException( - f"Failed to create sidetag for {dist_git_branch}" + f"Failed to create sidetag for {dist_git_branch}", ) sidetag.koji_name = tag_info["name"] return Sidetag(sidetag, cls.koji_helper) diff --git a/packit_service/worker/helpers/sync_release/propose_downstream.py b/packit_service/worker/helpers/sync_release/propose_downstream.py index 2958e91eb..e4b7bcb93 100644 --- a/packit_service/worker/helpers/sync_release/propose_downstream.py +++ b/packit_service/worker/helpers/sync_release/propose_downstream.py @@ -44,7 +44,7 @@ def __init__( def default_dg_branch(self) -> str: if not self._default_dg_branch: git_project = self.service_config.get_project( - url=self.package_config.dist_git_package_url + url=self.package_config.dist_git_package_url, ) self._default_dg_branch = git_project.default_branch return self._default_dg_branch diff --git a/packit_service/worker/helpers/sync_release/pull_from_upstream.py b/packit_service/worker/helpers/sync_release/pull_from_upstream.py index 8570ae54c..3d8d069fd 100644 --- a/packit_service/worker/helpers/sync_release/pull_from_upstream.py +++ b/packit_service/worker/helpers/sync_release/pull_from_upstream.py @@ -48,7 +48,7 @@ def default_dg_branch(self) -> str: if not self._default_dg_branch: if self.metadata.event_type in (NewHotnessUpdateEvent.__name__,): distgit_project_url = self.metadata.event_dict.get( - "distgit_project_url" + "distgit_project_url", ) elif self.metadata.event_type in (PullRequestCommentPagureEvent.__name__,): distgit_project_url = self.metadata.event_dict.get("project_url") diff --git a/packit_service/worker/helpers/testing_farm.py b/packit_service/worker/helpers/testing_farm.py index 0adf6af4c..3886216e1 100644 --- a/packit_service/worker/helpers/testing_farm.py +++ b/packit_service/worker/helpers/testing_farm.py @@ -135,7 +135,7 @@ def parse_known_arguments(self, args: argparse.Namespace) -> None: logger.debug(f"Parsed env variable: {key}={value}") else: logger.error( - f"Invalid format for '--env' argument: '{env}'. Expected VAR_NAME=value." + f"Invalid format for '--env' argument: '{env}'. Expected VAR_NAME=value.", ) continue @@ -399,7 +399,9 @@ def available_composes(self) -> Optional[Set[str]]: @staticmethod def _artifact( - chroot: str, build_id: Optional[int], built_packages: Optional[List[Dict]] + chroot: str, + build_id: Optional[int], + built_packages: Optional[List[Dict]], ) -> Dict[str, Union[List[str], str]]: artifact: Dict[str, Union[List[str], str]] = { "id": f"{build_id}:{chroot}", @@ -458,7 +460,8 @@ def is_final(v): elif not is_final(value): if key == TESTING_FARM_ARTIFACTS_KEY: cls._handle_extra_artifacts( - payload, params[TESTING_FARM_ARTIFACTS_KEY] + payload, + params[TESTING_FARM_ARTIFACTS_KEY], ) continue cls._merge_payload_with_extra_params(payload[key], params[key]) @@ -478,7 +481,7 @@ def _handle_extra_artifacts(cls, payload: Any, extra_params_artifacts: Any): else: logger.info( "Type of artifacts in the tf_extra_params is not a list, " - "not adding them to payload." + "not adding them to payload.", ) def _payload( @@ -523,7 +526,7 @@ def _payload( if additional_build is not None: packit_copr_projects.append( - f"{additional_build.owner}/{additional_build.project_name}" + f"{additional_build.owner}/{additional_build.project_name}", ) packit_copr_rpms = ( @@ -596,7 +599,7 @@ def _payload( "arch": arch, "trigger": "commit", "initiator": "packit", - } + }, }, "variables": predefined_environment, } @@ -605,7 +608,7 @@ def _payload( if self.tf_post_install_script: environment["settings"] = { - "provisioning": {"post_install_script": self.tf_post_install_script} + "provisioning": {"post_install_script": self.tf_post_install_script}, } payload = { @@ -638,7 +641,8 @@ def _payload( payload[subtree] = extra_params[subtree] else: self._merge_payload_with_extra_params( - payload[subtree], extra_params[subtree] + payload[subtree], + extra_params[subtree], ) return payload @@ -667,7 +671,7 @@ def _payload_install_test(self, build_id: int, target: str, compose: str) -> dic "variables": { "REPOSITORY": f"{copr_build.owner}/{copr_build.project_name}", }, - } + }, ], "notification": { "webhook": { @@ -703,7 +707,8 @@ def is_fmf_configured(self) -> bool: try: self.project.get_file_content( - path=f"{self.fmf_path}/.fmf/version", ref=self.metadata.commit_sha + path=f"{self.fmf_path}/.fmf/version", + ref=self.metadata.commit_sha, ) return True except FileNotFoundError: @@ -749,7 +754,7 @@ def distro2compose(self, target: str) -> Optional[str]: # some of those changes can change the target and result in a failure if self.is_compose_matching(distro, compiled_composes): logger.debug( - f"Distro {distro} directly matches a compose in the compose list." + f"Distro {distro} directly matches a compose in the compose list.", ) return distro @@ -854,7 +859,9 @@ def report_missing_build_chroot(self, chroot: str): ) def get_latest_copr_build( - self, target: str, commit_sha: str + self, + target: str, + commit_sha: str, ) -> Optional[CoprBuildTargetModel]: """ Search a last build for the given target and commit SHA using Copr owner and project. @@ -883,7 +890,7 @@ def _get_artifacts( artifacts = [] if not self.skip_build: artifacts.append( - self._artifact(chroot, int(build.build_id), build.built_packages) + self._artifact(chroot, int(build.build_id), build.built_packages), ) if additional_build: @@ -892,7 +899,7 @@ def _get_artifacts( chroot, int(additional_build.build_id), additional_build.built_packages, - ) + ), ) return artifacts @@ -914,7 +921,7 @@ def run_testing_farm( ) chroot = self.test_target2build_target(test_run.target) logger.debug( - f"Running testing farm for target {test_run.target}, chroot={chroot}." + f"Running testing farm for target {test_run.target}, chroot={chroot}.", ) if not self.skip_build and chroot not in self.build_targets: @@ -923,7 +930,7 @@ def run_testing_farm( success=False, details={ "msg": f"Target '{chroot}' not defined for build. " - "Cannot run tests without build." + "Cannot run tests without build.", }, ) @@ -956,7 +963,7 @@ def run_testing_farm( return TaskResults( success=True, details={ - "msg": "No latest successful Copr build from the other PR found." + "msg": "No latest successful Copr build from the other PR found.", }, ) @@ -1008,7 +1015,9 @@ def prepare_and_send_tf_request( ) elif not self.is_fmf_configured() and not self.skip_build: payload = self._payload_install_test( - build_id=int(build.build_id), target=test_run.target, compose=compose + build_id=int(build.build_id), + target=test_run.target, + compose=compose, ) else: self.report_status_to_tests_for_test_target( @@ -1029,12 +1038,16 @@ def prepare_and_send_tf_request( if not response: return self._handle_tf_submit_no_response( - test_run=test_run, target=test_run.target, payload=payload + test_run=test_run, + target=test_run.target, + payload=payload, ) if response.status_code != 200: return self._handle_tf_submit_failure( - test_run=test_run, response=response, payload=payload + test_run=test_run, + response=response, + payload=payload, ) return self._handle_tf_submit_successful( @@ -1044,13 +1057,20 @@ def prepare_and_send_tf_request( ) def send_testing_farm_request( - self, endpoint: str, method: str = None, params: dict = None, data=None + self, + endpoint: str, + method: str = None, + params: dict = None, + data=None, ) -> RequestResponse: method = method or "GET" url = f"{self.tft_api_url}{endpoint}" try: response = self.get_raw_request( - method=method, url=url, params=params, data=data + method=method, + url=url, + params=params, + data=data, ) except requests.exceptions.ConnectionError as er: logger.error(er) @@ -1101,7 +1121,8 @@ def get_request_details(cls, request_id: str) -> Dict[str, Any]: ) response = self.send_testing_farm_request( - endpoint=f"requests/{request_id}", method="GET" + endpoint=f"requests/{request_id}", + method="GET", ) if not response or response.status_code != 200: msg = f"Failed to get request/pipeline {request_id} details from TF. {response.reason}" @@ -1140,7 +1161,10 @@ def _handle_tf_submit_successful( return TaskResults(success=True, details={}) def _handle_tf_submit_no_response( - self, test_run: TFTTestRunTargetModel, target: str, payload: dict + self, + test_run: TFTTestRunTargetModel, + target: str, + payload: dict, ): """ Retry the task and report it to user or report the error state to user. @@ -1158,7 +1182,10 @@ def _handle_tf_submit_no_response( return TaskResults(success=False, details={"msg": msg}) def _handle_tf_submit_failure( - self, test_run: TFTTestRunTargetModel, response: RequestResponse, payload: dict + self, + test_run: TFTTestRunTargetModel, + response: RequestResponse, + payload: dict, ) -> TaskResults: """ Retry the task and report it to user or report the failure state to user. @@ -1192,7 +1219,9 @@ def _handle_tf_submit_failure( return TaskResults(success=False, details={"msg": msg}) def _retry_on_submit_failure( - self, test_run: TFTTestRunTargetModel, message: str + self, + test_run: TFTTestRunTargetModel, + message: str, ) -> TaskResults: """ Retry when there was a failure when submitting TF tests. @@ -1217,7 +1246,7 @@ def _retry_on_submit_failure( return TaskResults( success=True, details={ - "msg": f"Task will be retried because of failure when submitting tests: {message}" + "msg": f"Task will be retried because of failure when submitting tests: {message}", }, ) @@ -1260,16 +1289,17 @@ def get_copr_builds_from_other_pr( copr_builds = pr_model.get_copr_builds() if not copr_builds: logger.debug( - f"No copr builds for {project_url} and PR ID {pr_id} found in DB." + f"No copr builds for {project_url} and PR ID {pr_id} found in DB.", ) return None successful_most_recent_builds = filter_most_recent_target_models_by_status( - models=copr_builds, statuses_to_filter_with=[BuildStatus.success] + models=copr_builds, + statuses_to_filter_with=[BuildStatus.success], ) return self._construct_copr_builds_from_other_pr_dict( - successful_most_recent_builds + successful_most_recent_builds, ) def _parse_comment_pr_argument(self) -> Optional[Tuple[str, str, str]]: @@ -1288,7 +1318,7 @@ def _parse_comment_pr_argument(self) -> Optional[Tuple[str, str, str]]: logger.debug( "Unexpected format of the test argument:" f" not able to split the test argument " - f"{self.comment_arguments.pr_argument} with '#'." + f"{self.comment_arguments.pr_argument} with '#'.", ) return None @@ -1298,19 +1328,20 @@ def _parse_comment_pr_argument(self) -> Optional[Tuple[str, str, str]]: logger.debug( "Unexpected format of the test argument: " f"not able to split the test argument " - f"{self.comment_arguments.pr_argument} with '/'." + f"{self.comment_arguments.pr_argument} with '/'.", ) return None namespace, repo = namespace_repo logger.debug( - f"Parsed test argument -> namespace: {namespace}, repo: {repo}, PR ID: {pr_id}" + f"Parsed test argument -> namespace: {namespace}, repo: {repo}, PR ID: {pr_id}", ) return namespace, repo, pr_id def _construct_copr_builds_from_other_pr_dict( - self, successful_most_recent_builds + self, + successful_most_recent_builds, ) -> Optional[Dict[str, CoprBuildTargetModel]]: """ Construct a dictionary that will contain for each build target name @@ -1401,7 +1432,8 @@ def report_status_to_tests_for_chroot( ) -> None: if chroot in self.build_targets_for_tests: test_targets = self.build_target2test_targets_for_test_job( - chroot, self.job_config + chroot, + self.job_config, ) for target in test_targets: self._report( diff --git a/packit_service/worker/jobs.py b/packit_service/worker/jobs.py index 3ec8daa31..a598d0fc5 100644 --- a/packit_service/worker/jobs.py +++ b/packit_service/worker/jobs.py @@ -95,7 +95,8 @@ def get_handlers_for_comment( - comment: str, packit_comment_command_prefix: str + comment: str, + packit_comment_command_prefix: str, ) -> Set[Type[JobHandler]]: """ Get handlers for the given command respecting packit_comment_command_prefix. @@ -130,7 +131,7 @@ def get_handlers_for_check_rerun(check_name_job: str) -> Set[Type[JobHandler]]: handlers = MAP_CHECK_PREFIX_TO_HANDLER[check_name_job] if not handlers: logger.debug( - f"Rerun for check with {check_name_job} prefix not supported by packit." + f"Rerun for check with {check_name_job} prefix not supported by packit.", ) return handlers @@ -170,7 +171,10 @@ def process_message( List of results of the processing tasks. """ parser = nested_get( - Parser.MAPPING, source, event_type, default=Parser.parse_event + Parser.MAPPING, + source, + event_type, + default=Parser.parse_event, ) event_object: Optional[Event] = parser(event) @@ -205,7 +209,10 @@ def process(self) -> List[TaskResults]: self.event.project.repo, ) logger.info( - "Packit is not installed on %s/%s/%s, skipping.", host, namespace, repo + "Packit is not installed on %s/%s/%s, skipping.", + host, + namespace, + repo, ) return [] @@ -215,17 +222,22 @@ def process(self) -> List[TaskResults]: # not repository, so package config with jobs is missing if isinstance(self.event, InstallationEvent): GithubAppInstallationHandler.get_signature( - event=self.event, job=None + event=self.event, + job=None, ).apply_async() elif isinstance( - self.event, IssueCommentEvent + self.event, + IssueCommentEvent, ) and self.is_fas_verification_comment(self.event.comment): if GithubFasVerificationHandler.pre_check( - package_config=None, job_config=None, event=self.event.get_dict() + package_config=None, + job_config=None, + event=self.event.get_dict(), ): self.event.comment_object.add_reaction(COMMENT_REACTION) GithubFasVerificationHandler.get_signature( - event=self.event, job=None + event=self.event, + job=None, ).apply_async() # should we comment about not processing if the comment is not # on the issue created by us or not in packit/notifications? @@ -240,13 +252,15 @@ def process(self) -> List[TaskResults]: msg="Job created.", job_config=None, event=self.event, - ) + ), ] return processing_results def initialize_job_helper( - self, handler_kls: Type[JobHandler], job_config: JobConfig + self, + handler_kls: Type[JobHandler], + job_config: JobConfig, ) -> Union[ProposeDownstreamJobHelper, BaseBuildJobHelper]: """ Initialize job helper with arguments @@ -292,7 +306,7 @@ def initialize_job_helper( { "build_targets_override": self.event.build_targets_override, "tests_targets_override": self.event.tests_targets_override, - } + }, ) return helper_kls(**params) @@ -428,7 +442,8 @@ def process_jobs(self) -> List[TaskResults]: List of the results of each task. """ if isinstance( - self.event, AbstractCommentEvent + self.event, + AbstractCommentEvent, ) and not get_handlers_for_comment( self.event.comment, packit_comment_command_prefix=self.service_config.comment_command_prefix, @@ -437,7 +452,7 @@ def process_jobs(self) -> List[TaskResults]: TaskResults( success=True, details={"msg": "No Packit command found in the comment."}, - ) + ), ] if not self.is_packit_config_present(): @@ -447,14 +462,14 @@ def process_jobs(self) -> List[TaskResults]: msg="No packit config found in the repository.", job_config=None, event=self.event, - ) + ), ] handler_classes = self.get_handlers_for_event() if not handler_classes: logger.debug( - f"There is no handler for {self.event} event suitable for the configuration." + f"There is no handler for {self.event} event suitable for the configuration.", ) return [] @@ -487,7 +502,7 @@ def process_jobs(self) -> List[TaskResults]: ] processing_results.extend( - self.create_tasks(job_configs, handler_kls, statuses_check_feedback) + self.create_tasks(job_configs, handler_kls, statuses_check_feedback), ) self.push_statuses_metrics(statuses_check_feedback) @@ -511,7 +526,8 @@ def create_tasks( # we want to run handlers for all possible jobs, not just the first one for job_config in job_configs: if self.should_task_be_created_for_job_config_and_handler( - job_config, handler_kls + job_config, + handler_kls, ): self.report_task_accepted( handler_kls=handler_kls, @@ -526,11 +542,11 @@ def create_tasks( self.event.store_packages_config() signatures.append( - handler_kls.get_signature(event=self.event, job=job_config) + handler_kls.get_signature(event=self.event, job=job_config), ) logger.debug( f"Got signature for handler={handler_kls} " - f"and job_config={job_config}." + f"and job_config={job_config}.", ) processing_results.append( TaskResults.create_from( @@ -538,7 +554,7 @@ def create_tasks( msg="Job created.", job_config=job_config, event=self.event, - ) + ), ) logger.debug("Signatures are going to be sent to Celery.") # https://docs.celeryq.dev/en/stable/userguide/canvas.html#groups @@ -547,7 +563,9 @@ def create_tasks( return processing_results def should_task_be_created_for_job_config_and_handler( - self, job_config: JobConfig, handler_kls: Type[JobHandler] + self, + job_config: JobConfig, + handler_kls: Type[JobHandler], ) -> bool: """ Check whether a new task should be created for job config and handler. @@ -563,7 +581,7 @@ def should_task_be_created_for_job_config_and_handler( logger.debug( f"Current deployment ({self.service_config.deployment}) " f"does not match the job configuration ({job_config.packit_instances}). " - "The job will not be run." + "The job will not be run.", ) return False @@ -610,7 +628,7 @@ def is_project_public_or_enabled_private(self) -> bool: elif not self.event.project: logger.warning( "Cannot obtain project from this event! " - "Skipping private repository check!" + "Skipping private repository check!", ) elif self.event.project.is_private(): service_with_namespace = ( @@ -624,12 +642,12 @@ def is_project_public_or_enabled_private(self) -> bool: logger.info( f"We do not interact with private repositories by default. " f"Add `{service_with_namespace}` to the `enabled_private_namespaces` " - f"in the service configuration." + f"in the service configuration.", ) return False logger.debug( f"Working in `{service_with_namespace}` namespace " - f"which is private but enabled via configuration." + f"which is private but enabled via configuration.", ) return True @@ -770,17 +788,19 @@ def get_handlers_for_comment_and_rerun_event(self) -> Set[Type[JobHandler]]: if isinstance(self.event, AbstractCommentEvent): handlers_triggered_by_job = get_handlers_for_comment( - self.event.comment, self.service_config.comment_command_prefix + self.event.comment, + self.service_config.comment_command_prefix, ) if handlers_triggered_by_job and not isinstance( - self.event, PullRequestCommentPagureEvent + self.event, + PullRequestCommentPagureEvent, ): self.event.comment_object.add_reaction(COMMENT_REACTION) if isinstance(self.event, CheckRerunEvent): handlers_triggered_by_job = get_handlers_for_check_rerun( - self.event.check_name_job + self.event.check_name_job, ) return handlers_triggered_by_job @@ -818,7 +838,7 @@ def get_handlers_for_event(self) -> Set[Type[JobHandler]]: if not matching_handlers: logger.debug( - f"We did not find any handler for a following event:\n{self.event.__class__}" + f"We did not find any handler for a following event:\n{self.event.__class__}", ) logger.debug(f"Matching handlers: {matching_handlers}") @@ -852,7 +872,8 @@ def is_handler_matching_the_event( ) def get_config_for_handler_kls( - self, handler_kls: Type[JobHandler] + self, + handler_kls: Type[JobHandler], ) -> List[JobConfig]: """ Get a list of JobConfigs relevant to event and the handler class. @@ -883,7 +904,7 @@ def get_config_for_handler_kls( if not matching_jobs: logger.debug( - "No config found, let's see the jobs that requires this handler." + "No config found, let's see the jobs that requires this handler.", ) for job in jobs_matching_trigger: if handler_kls in MAP_REQUIRED_JOB_TYPE_TO_HANDLER[job.type]: @@ -892,7 +913,7 @@ def get_config_for_handler_kls( if not matching_jobs: logger.warning( f"We did not find any config for {handler_kls} and a following event:\n" - f"{self.event.__class__}" + f"{self.event.__class__}", ) logger.debug(f"Jobs matching {handler_kls}: {matching_jobs}") @@ -914,10 +935,11 @@ def push_statuses_metrics( return response_time = elapsed_seconds( - begin=self.event.created_at, end=statuses_check_feedback[0] + begin=self.event.created_at, + end=statuses_check_feedback[0], ) logger.debug( - f"Reporting first initial status check time: {response_time} seconds." + f"Reporting first initial status check time: {response_time} seconds.", ) self.pushgateway.first_initial_status_time.observe(response_time) if response_time > 25: @@ -927,17 +949,18 @@ def push_statuses_metrics( # we need more info why this has happened logger.debug(f"Event dict: {self.event}.") logger.error( - f"Event {self.event.__class__.__name__} took more than 15s to process." + f"Event {self.event.__class__.__name__} took more than 15s to process.", ) # set the time when the accepted status was set so that we # can use it later for measurements self.event.task_accepted_time = statuses_check_feedback[0] response_time = elapsed_seconds( - begin=self.event.created_at, end=statuses_check_feedback[-1] + begin=self.event.created_at, + end=statuses_check_feedback[-1], ) logger.debug( - f"Reporting last initial status check time: {response_time} seconds." + f"Reporting last initial status check time: {response_time} seconds.", ) self.pushgateway.last_initial_status_time.observe(response_time) @@ -974,23 +997,26 @@ def is_fas_verification_comment(self, comment: str) -> bool: `True`, if is verification comment, `False` otherwise. """ command = get_packit_commands_from_comment( - comment, self.service_config.comment_command_prefix + comment, + self.service_config.comment_command_prefix, ) return bool(command and command[0] == PACKIT_VERIFY_FAS_COMMAND) def report_task_accepted_for_downstream_retrigger_comments( - self, handler_kls: Type[JobHandler] + self, + handler_kls: Type[JobHandler], ): """ For dist-git PR comment events/ issue comment events in issue_repository, report that the task was accepted and provide handler specific info. """ if not isinstance( - self.event, (AbstractIssueCommentEvent, AbstractPRCommentEvent) + self.event, + (AbstractIssueCommentEvent, AbstractPRCommentEvent), ): logger.debug( - "Not a comment event, not reporting task was accepted via comment." + "Not a comment event, not reporting task was accepted via comment.", ) return diff --git a/packit_service/worker/mixin.py b/packit_service/worker/mixin.py index ab389b600..63b6d5338 100644 --- a/packit_service/worker/mixin.py +++ b/packit_service/worker/mixin.py @@ -87,7 +87,8 @@ def service_config(self) -> ServiceConfig: def project(self) -> Optional[GitProject]: if not self._project and self.project_url: self._project = self.service_config.get_project( - url=self.project_url, required=self._project_required + url=self.project_url, + required=self._project_required, ) return self._project @@ -236,7 +237,7 @@ def local_project(self) -> LocalProject: ) working_dir = Path( Path(self.service_config.command_handler_work_dir) - / SANDCASTLE_LOCAL_PROJECT_DIR + / SANDCASTLE_LOCAL_PROJECT_DIR, ) kwargs = { "repo_name": CALCULATE, @@ -274,7 +275,7 @@ def pull_request(self): if self.data.pr_id is not None: logger.debug( f"Getting pull request #{self.data.pr_id}" - f"for repo {self.project.namespace}/{self.project.repo}" + f"for repo {self.project.namespace}/{self.project.repo}", ) self._pull_request = self.project.get_pr(self.data.pr_id) return self._pull_request diff --git a/packit_service/worker/monitoring.py b/packit_service/worker/monitoring.py index 05ce236c0..c27e9936c 100644 --- a/packit_service/worker/monitoring.py +++ b/packit_service/worker/monitoring.py @@ -12,7 +12,8 @@ class Pushgateway: def __init__(self): self.pushgateway_address = os.getenv( - "PUSHGATEWAY_ADDRESS", "http://pushgateway" + "PUSHGATEWAY_ADDRESS", + "http://pushgateway", ) # so that workers don't overwrite each other's metrics, # the job name corresponds to worker name (e.g. packit-worker-0) @@ -166,5 +167,7 @@ def push(self): logger.info("Pushing the metrics to pushgateway.") push_to_gateway( - self.pushgateway_address, job=self.worker_name, registry=self.registry + self.pushgateway_address, + job=self.worker_name, + registry=self.registry, ) diff --git a/packit_service/worker/parser.py b/packit_service/worker/parser.py index d34cf9827..ce6376b6e 100644 --- a/packit_service/worker/parser.py +++ b/packit_service/worker/parser.py @@ -213,7 +213,7 @@ def parse_mr_event(event) -> Optional[MergeRequestGitlabEvent]: f"url={source_project_url} " f"namespace={parsed_source_url.namespace} " f"repo={parsed_source_url.repo} " - f"branch={source_repo_branch}." + f"branch={source_repo_branch}.", ) target_project_url = nested_get(event, "project", "web_url") @@ -227,7 +227,7 @@ def parse_mr_event(event) -> Optional[MergeRequestGitlabEvent]: f"url={target_project_url} " f"namespace={parsed_target_url.namespace} " f"repo={parsed_target_url.repo} " - f"branch={target_repo_branch}." + f"branch={target_repo_branch}.", ) commit_sha = nested_get(event, "object_attributes", "last_commit", "id") @@ -274,7 +274,12 @@ def parse_pr_event(event) -> Optional[PullRequestGithubEvent]: # and not the fork, on the other hand, we don't process packit.yaml from # the PR but what's in the upstream base_repo_namespace = nested_get( - event, "pull_request", "head", "repo", "owner", "login" + event, + "pull_request", + "head", + "repo", + "owner", + "login", ) base_repo_name = nested_get(event, "pull_request", "head", "repo", "name") @@ -293,7 +298,12 @@ def parse_pr_event(event) -> Optional[PullRequestGithubEvent]: return None target_repo_namespace = nested_get( - event, "pull_request", "base", "repo", "owner", "login" + event, + "pull_request", + "base", + "repo", + "owner", + "login", ) target_repo_name = nested_get(event, "pull_request", "base", "repo", "name") logger.info(f"Target repo: {target_repo_namespace}/{target_repo_name}.") @@ -337,7 +347,7 @@ def parse_gitlab_release_event(event) -> Optional[ReleaseGitlabEvent]: f"Gitlab release with tag {tag_name} event on Project: " f"repo={parsed_url.repo} " f"namespace={parsed_url.namespace} " - f"url={project_url}." + f"url={project_url}.", ) commit_sha = nested_get(event, "commit", "id") @@ -391,7 +401,7 @@ def get_gitlab_push_common_data(event) -> tuple: if not Parser.is_gitlab_push_a_create_event(event): raise PackitParserException( - "Event is not a push create event, stop parsing" + "Event is not a push create event, stop parsing", ) # The first item in the list should be the head (newest) commit, @@ -401,19 +411,19 @@ def get_gitlab_push_common_data(event) -> tuple: logger.info( f"Gitlab push event on '{raw_ref}': {before[:8]} -> {checkout_sha[:8]} " f"by {actor} " - f"({number_of_commits} {'commit' if number_of_commits == 1 else 'commits'})" + f"({number_of_commits} {'commit' if number_of_commits == 1 else 'commits'})", ) if not (project_url := nested_get(event, "project", "web_url")): raise PackitParserException( - "Target project url not found in the event, stop parsing" + "Target project url not found in the event, stop parsing", ) parsed_url = parse_git_repo(potential_url=project_url) logger.info( f"Project: " f"repo={parsed_url.repo} " f"namespace={parsed_url.namespace} " - f"url={project_url}." + f"url={project_url}.", ) ref = raw_ref.split("/", maxsplit=2)[-1] @@ -446,7 +456,7 @@ def parse_gitlab_tag_push_event(event) -> Optional[TagPushGitlabEvent]: f"by actor {actor} on Project: " f"repo={parsed_url.repo} " f"namespace={parsed_url.namespace} " - f"url={project_url}." + f"url={project_url}.", ) return TagPushGitlabEvent( @@ -510,7 +520,7 @@ def parse_github_push_event(event) -> Optional[PushGitHubEvent]: return None elif event.get("deleted"): logger.info( - f"GitHub push event on '{raw_ref}' by {pusher} to delete branch" + f"GitHub push event on '{raw_ref}' by {pusher} to delete branch", ) return None @@ -523,7 +533,7 @@ def parse_github_push_event(event) -> Optional[PushGitHubEvent]: logger.info( f"GitHub push event on '{raw_ref}': {before[:8]} -> {head_commit[:8]} " f"by {pusher} " - f"({number_of_commits} {'commit' if number_of_commits == 1 else 'commits'})" + f"({number_of_commits} {'commit' if number_of_commits == 1 else 'commits'})", ) repo_namespace = nested_get(event, "repository", "owner", "login") @@ -573,7 +583,7 @@ def parse_pull_request_comment_event( comment = nested_get(event, "comment", "body") comment_id = nested_get(event, "comment", "id") logger.info( - f"Github PR#{pr_id} comment: {comment!r} id#{comment_id} {action!r} event." + f"Github PR#{pr_id} comment: {comment!r} id#{comment_id} {action!r} event.", ) base_repo_namespace = nested_get(event, "issue", "user", "login") @@ -698,7 +708,7 @@ def parse_gitlab_issue_comment_event(event) -> Optional[IssueCommentGitlabEvent] action = state logger.info( - f"Gitlab issue ID: {issue_id} comment: {comment!r} {action!r} event." + f"Gitlab issue ID: {issue_id} comment: {comment!r} {action!r} event.", ) project_url = nested_get(event, "project", "web_url") @@ -710,7 +720,7 @@ def parse_gitlab_issue_comment_event(event) -> Optional[IssueCommentGitlabEvent] f"Project: " f"repo={parsed_url.repo} " f"namespace={parsed_url.namespace} " - f"url={project_url}." + f"url={project_url}.", ) actor = nested_get(event, "user", "username") @@ -761,7 +771,7 @@ def parse_merge_request_comment_event( comment_id = nested_get(event, "object_attributes", "id") logger.info( f"Gitlab MR id#{object_id} iid#{object_iid} comment: {comment!r} id#{comment_id} " - f"{action!r} event." + f"{action!r} event.", ) source_project_url = nested_get(event, "merge_request", "source", "web_url") @@ -773,7 +783,7 @@ def parse_merge_request_comment_event( f"Source: " f"repo={parsed_source_url.repo} " f"namespace={parsed_source_url.namespace} " - f"url={source_project_url}." + f"url={source_project_url}.", ) target_project_url = nested_get(event, "project", "web_url") @@ -785,7 +795,7 @@ def parse_merge_request_comment_event( f"Target: " f"repo={parsed_target_url.repo} " f"namespace={parsed_target_url.namespace} " - f"url={target_project_url}." + f"url={target_project_url}.", ) actor = nested_get(event, "user", "username") @@ -819,7 +829,8 @@ def parse_merge_request_comment_event( @staticmethod def parse_check_name( - check_name: str, db_project_event: ProjectEventModel + check_name: str, + db_project_event: ProjectEventModel, ) -> Optional[Tuple[str, str, str]]: """ Parse the given name of the check run. @@ -846,7 +857,7 @@ def parse_check_name( if check_name_job not in MAP_CHECK_PREFIX_TO_HANDLER: logger.warning( - f"{check_name_job} not in {list(MAP_CHECK_PREFIX_TO_HANDLER.keys())}" + f"{check_name_job} not in {list(MAP_CHECK_PREFIX_TO_HANDLER.keys())}", ) return None @@ -894,13 +905,13 @@ def parse_check_name( if not (check_name_job and check_name_target): logger.warning( f"We were not able to parse the job and target " - f"from the check run name {check_name}." + f"from the check run name {check_name}.", ) return None logger.info( f"Check name job: {check_name_job}, check name target: {check_name_target}, " - f"check name identifier: {check_name_identifier}" + f"check name identifier: {check_name_identifier}", ) return check_name_job, check_name_target, check_name_identifier @@ -933,7 +944,7 @@ def parse_check_rerun_event( if not external_id: logger.warning( - "No external_id to identify the original project event provided." + "No external_id to identify the original project event provided.", ) return None @@ -1028,7 +1039,7 @@ def parse_installation_event(event) -> Optional[InstallationEvent]: logger.info(f"Github App installation {action!r} event. id: {installation_id}") logger.debug( f"account: {event['installation']['account']}, " - f"repositories: {repo_names}, sender: {event['sender']}" + f"repositories: {repo_names}, sender: {event['sender']}", ) # namespace (user/organization) into which the app has been installed @@ -1082,7 +1093,7 @@ def parse_release_event(event) -> Optional[ReleaseEvent]: return None logger.info( - f"New release event {release_ref!r} for repo {repo_namespace}/{repo_name}." + f"New release event {release_ref!r} for repo {repo_namespace}/{repo_name}.", ) https_url = event["repository"]["html_url"] return ReleaseEvent(repo_namespace, repo_name, release_ref, https_url) @@ -1113,7 +1124,7 @@ def parse_pagure_push_event(event) -> Optional[PushPagureEvent]: logger.info( f"New commits added to dist-git repo {dg_repo_namespace}/{dg_repo_name}," - f"rev: {dg_commit}, branch: {dg_branch}" + f"rev: {dg_commit}, branch: {dg_branch}", ) dg_base_url = getenv("DISTGIT_URL", DISTGIT_INSTANCES["fedpkg"].url) @@ -1133,9 +1144,19 @@ def parse_pagure_push_event(event) -> Optional[PushPagureEvent]: @staticmethod def parse_data_from_testing_farm( - tft_test_run: TFTTestRunTargetModel, event: Dict[Any, Any] + tft_test_run: TFTTestRunTargetModel, + event: Dict[Any, Any], ) -> Tuple[ - str, str, TestingFarmResult, str, str, str, str, str, datetime, Optional[str] + str, + str, + TestingFarmResult, + str, + str, + str, + str, + str, + datetime, + Optional[str], ]: """Parses common data from testing farm response. @@ -1266,7 +1287,7 @@ def parse_testing_farm_results_event( logger.debug( f"project_url: {project_url}, ref: {ref}, result: {result}, " f"summary: {summary!r}, copr-build: {copr_build_id}:{copr_chroot},\n" - f"log_url: {log_url}" + f"log_url: {log_url}", ) return TestingFarmResultsEvent( @@ -1308,7 +1329,14 @@ def parse_copr_event(event) -> Optional[AbstractCoprBuildEvent]: timestamp = event.get("timestamp") return copr_build_cls.from_build_id( - topic, build_id, chroot, status, owner, project_name, pkg, timestamp + topic, + build_id, + chroot, + status, + owner, + project_name, + pkg, + timestamp, ) @staticmethod @@ -1431,7 +1459,7 @@ def parse_koji_build_tag_event(event) -> Optional[KojiBuildTagEvent]: owner = event.get("owner") logger.info( - f"Koji build tag event: build_id={build_id} tag={tag_name} owner={owner}" + f"Koji build tag event: build_id={build_id} tag={tag_name} owner={owner}", ) package_name = event.get("name") @@ -1566,7 +1594,7 @@ def parse_pagure_pull_request_comment_event( comment_id = event["pullrequest"]["comments"][-1]["id"] else: raise ValueError( - f"Unknown comment location in response for {event['topic']}" + f"Unknown comment location in response for {event['topic']}", ) return PullRequestCommentPagureEvent( @@ -1612,7 +1640,7 @@ def parse_new_hotness_update_event(event) -> Optional[NewHotnessUpdateEvent]: logger.info( f"New hotness update event for package: {package_name}, version: {version}," - f" bug ID: {bug_id}" + f" bug ID: {bug_id}", ) return NewHotnessUpdateEvent( @@ -1637,7 +1665,7 @@ def parse_anitya_version_update_event(event) -> Optional[AnityaVersionUpdateEven if package["distro"] == "CentOS" ) distgit_project_url = DISTGIT_INSTANCES["centpkg"].distgit_project_url( - package_name + package_name, ) # ‹upstream_versions› contain the new releases @@ -1647,7 +1675,7 @@ def parse_anitya_version_update_event(event) -> Optional[AnityaVersionUpdateEven anitya_project_name = nested_get(event, "message", "project", "name") logger.info( - f"Anitya version update event for package: {package_name}, versions: {versions}" + f"Anitya version update event for package: {package_name}, versions: {versions}", ) return AnityaVersionUpdateEvent( package_name=package_name, diff --git a/packit_service/worker/reporting/enums.py b/packit_service/worker/reporting/enums.py index 07c0f0f91..322684006 100644 --- a/packit_service/worker/reporting/enums.py +++ b/packit_service/worker/reporting/enums.py @@ -41,7 +41,8 @@ class BaseCommitStatus(Enum): } MAP_TO_CHECK_RUN: Dict[ - BaseCommitStatus, Union[GithubCheckRunResult, GithubCheckRunStatus] + BaseCommitStatus, + Union[GithubCheckRunResult, GithubCheckRunStatus], ] = { BaseCommitStatus.pending: GithubCheckRunStatus.queued, BaseCommitStatus.running: GithubCheckRunStatus.in_progress, diff --git a/packit_service/worker/reporting/reporters/base.py b/packit_service/worker/reporting/reporters/base.py index f121fb851..c57940dc3 100644 --- a/packit_service/worker/reporting/reporters/base.py +++ b/packit_service/worker/reporting/reporters/base.py @@ -30,7 +30,7 @@ def __init__( pr_id: Optional[int] = None, ): logger.debug( - f"Status reporter will report for {project}, commit={commit_sha}, pr={pr_id}" + f"Status reporter will report for {project}, commit={commit_sha}, pr={pr_id}", ) self.project: GitProject = project self._project_with_commit: Optional[GitProject] = None @@ -171,7 +171,11 @@ def is_final_state(state: BaseCommitStatus) -> bool: } def _add_commit_comment_with_status( - self, state: BaseCommitStatus, description: str, check_name: str, url: str = "" + self, + state: BaseCommitStatus, + description: str, + check_name: str, + url: str = "", ): """Add a comment with status to the commit. @@ -183,7 +187,7 @@ def _add_commit_comment_with_status( f"- name: {check_name}", f"- state: {state.name}", f"- url: {url or 'not provided'}", - ] + ], ) + f"\n\n{description}" ) @@ -219,7 +223,10 @@ def get_statuses(self): self.project_with_commit.get_commit_statuses(commit=self.commit_sha) def _has_identical_comment( - self, body: str, mode: DuplicateCheckMode, check_commit: bool = False + self, + body: str, + mode: DuplicateCheckMode, + check_commit: bool = False, ) -> bool: """Checks if the body is the same as the last or any (based on mode) comment. diff --git a/packit_service/worker/reporting/reporters/github.py b/packit_service/worker/reporting/reporters/github.py index 1336ae811..06fea43d4 100644 --- a/packit_service/worker/reporting/reporters/github.py +++ b/packit_service/worker/reporting/reporters/github.py @@ -41,20 +41,25 @@ def set_status( ): state_to_set = self.get_commit_status(state) logger.debug( - f"Setting Github status '{state_to_set.name}' for check '{check_name}': {description}" + f"Setting Github status '{state_to_set.name}' for check '{check_name}': {description}", ) if markdown_content: logger.debug( - f"Markdown content not supported in {self.__class__.__name__} and is ignored." + f"Markdown content not supported in {self.__class__.__name__} and is ignored.", ) try: self.project_with_commit.set_commit_status( - self.commit_sha, state_to_set, url, description, check_name, trim=True + self.commit_sha, + state_to_set, + url, + description, + check_name, + trim=True, ) except GithubAPIException as e: logger.debug( f"Failed to set status for {self.commit_sha}," - f" commenting on commit as a fallback: {e}" + f" commenting on commit as a fallback: {e}", ) self._add_commit_comment_with_status(state, description, check_name, url) @@ -64,7 +69,8 @@ class StatusReporterGithubChecks(StatusReporterGithubStatuses): @staticmethod def _create_table( - url: str, links_to_external_services: Optional[Dict[str, str]] + url: str, + links_to_external_services: Optional[Dict[str, str]], ) -> str: table_content = [] if url: @@ -101,7 +107,7 @@ def set_status( state_to_set = self.get_check_run(state) logger.debug( f"Setting Github status check '{state_to_set.name}' for check '{check_name}':" - f" {description}" + f" {description}", ) summary = ( @@ -134,6 +140,6 @@ def set_status( ) except GithubAPIException as e: logger.debug( - f"Failed to set status check, setting status as a fallback: {str(e)}" + f"Failed to set status check, setting status as a fallback: {str(e)}", ) super().set_status(state, description, check_name, url) diff --git a/packit_service/worker/reporting/reporters/gitlab.py b/packit_service/worker/reporting/reporters/gitlab.py index 02d615716..96385bc2c 100644 --- a/packit_service/worker/reporting/reporters/gitlab.py +++ b/packit_service/worker/reporting/reporters/gitlab.py @@ -33,16 +33,21 @@ def set_status( ): state_to_set = self.get_commit_status(state) logger.debug( - f"Setting Gitlab status '{state_to_set.name}' for check '{check_name}': {description}" + f"Setting Gitlab status '{state_to_set.name}' for check '{check_name}': {description}", ) if markdown_content: logger.debug( - f"Markdown content not supported in {self.__class__.__name__} and is ignored." + f"Markdown content not supported in {self.__class__.__name__} and is ignored.", ) try: self.project_with_commit.set_commit_status( - self.commit_sha, state_to_set, url, description, check_name, trim=True + self.commit_sha, + state_to_set, + url, + description, + check_name, + trim=True, ) except GitlabAPIException as e: # Ignoring Gitlab 'enqueue' error @@ -52,10 +57,13 @@ def set_status( # 404: Commit has not been found, e.g. used target project on GitLab logger.debug( f"Failed to set status for {self.commit_sha}," - f" commenting on commit as a fallback: {e}" + f" commenting on commit as a fallback: {e}", ) self._add_commit_comment_with_status( - state, description, check_name, url + state, + description, + check_name, + url, ) if e.response_code not in {400, 403, 404}: raise diff --git a/packit_service/worker/reporting/reporters/pagure.py b/packit_service/worker/reporting/reporters/pagure.py index 6abaf1bc6..d2339cc6b 100644 --- a/packit_service/worker/reporting/reporters/pagure.py +++ b/packit_service/worker/reporting/reporters/pagure.py @@ -33,11 +33,11 @@ def set_status( ): state_to_set = self.get_commit_status(state) logger.debug( - f"Setting Pagure status '{state_to_set.name}' for check '{check_name}': {description}" + f"Setting Pagure status '{state_to_set.name}' for check '{check_name}': {description}", ) if markdown_content: logger.debug( - f"Markdown content not supported in {self.__class__.__name__} and is ignored." + f"Markdown content not supported in {self.__class__.__name__} and is ignored.", ) # Required because Pagure API doesn't accept empty url. @@ -45,5 +45,10 @@ def set_status( url = "https://wiki.centos.org/Manuals/ReleaseNotes/CentOSStream" self.project_with_commit.set_commit_status( - self.commit_sha, state_to_set, url, description, check_name, trim=True + self.commit_sha, + state_to_set, + url, + description, + check_name, + trim=True, ) diff --git a/packit_service/worker/reporting/utils.py b/packit_service/worker/reporting/utils.py index e7ea3da52..d91611407 100644 --- a/packit_service/worker/reporting/utils.py +++ b/packit_service/worker/reporting/utils.py @@ -24,14 +24,14 @@ def report_in_issue_repository( """ if not issue_repository: logger.debug( - "No issue repository configured. User will not be notified about the failure." + "No issue repository configured. User will not be notified about the failure.", ) return logger.debug( f"Issue repository configured. We will create " f"a new issue in {issue_repository} " - "or update the existing one." + "or update the existing one.", ) issue_repo = service_config.get_project(url=issue_repository) PackageConfigGetter.create_issue_if_needed( @@ -43,7 +43,8 @@ def report_in_issue_repository( def update_message_with_configured_failure_comment_message( - comment: str, job_config: JobConfig + comment: str, + job_config: JobConfig, ) -> str: """ If there is the notifications.failure_comment.message present in the configuration, diff --git a/packit_service/worker/result.py b/packit_service/worker/result.py index e726855ba..07567f44b 100644 --- a/packit_service/worker/result.py +++ b/packit_service/worker/result.py @@ -29,7 +29,11 @@ def __init__(self, success: bool, details: Dict[str, Any] = None): @classmethod def create_from( - cls, success: bool, msg: str, event: Event, job_config: JobConfig = None + cls, + success: bool, + msg: str, + event: Event, + job_config: JobConfig = None, ): package_config = ( event.packages_config.get_package_config_for(job_config) @@ -46,7 +50,7 @@ def create_from( { "job": job_config.type.value if job_config else None, "job_config": dump_job_config(job_config), - } + }, ) return cls(success=success, details=details) diff --git a/packit_service/worker/tasks.py b/packit_service/worker/tasks.py index 81f1e7ea1..8f5ef7a90 100644 --- a/packit_service/worker/tasks.py +++ b/packit_service/worker/tasks.py @@ -130,8 +130,8 @@ def format(self, record): # add task name and id to log messages from tasks logger.handlers[0].setFormatter( CustomFormatter( - "[%(asctime)s: %(levelname)s/%(processName)s]%(task_info)s %(message)s" - ) + "[%(asctime)s: %(levelname)s/%(processName)s]%(task_info)s %(message)s", + ), ) syslog_host = getenv("SYSLOG_HOST", "fluentd") @@ -183,7 +183,10 @@ class BodhiTaskWithRetry(TaskWithRetry): base=TaskWithRetry, ) def process_message( - self, event: dict, source: Optional[str] = None, event_type: Optional[str] = None + self, + event: dict, + source: Optional[str] = None, + event_type: Optional[str] = None, ) -> List[TaskResults]: """ Main celery task for processing messages. @@ -214,7 +217,7 @@ def babysit_copr_build(self, build_id: int): """check status of a copr build and update it in DB""" if not check_copr_build(build_id=build_id): raise PackitCoprBuildTimeoutException( - f"No feedback for copr build id={build_id} yet" + f"No feedback for copr build id={build_id} yet", ) @@ -240,7 +243,10 @@ def run_copr_build_end_handler(event: dict, package_config: dict, job_config: di @celery_app.task( - bind=True, name=TaskName.copr_build, base=TaskWithRetry, queue="long-running" + bind=True, + name=TaskName.copr_build, + base=TaskWithRetry, + queue="long-running", ) def run_copr_build_handler( self, @@ -262,17 +268,23 @@ def run_copr_build_handler( @celery_app.task(name=TaskName.installation, base=TaskWithRetry) def run_installation_handler(event: dict, package_config: dict, job_config: dict): handler = GithubAppInstallationHandler( - package_config=None, job_config=None, event=event + package_config=None, + job_config=None, + event=event, ) return get_handlers_task_results(handler.run_job(), event) @celery_app.task(name=TaskName.github_fas_verification, base=TaskWithRetry) def run_github_fas_verification_handler( - event: dict, package_config: dict, job_config: dict + event: dict, + package_config: dict, + job_config: dict, ): handler = GithubFasVerificationHandler( - package_config=None, job_config=None, event=event + package_config=None, + job_config=None, + event=event, ) return get_handlers_task_results(handler.run_job(), event) @@ -299,7 +311,9 @@ def run_testing_farm_handler( @celery_app.task(name=TaskName.testing_farm_results, base=TaskWithRetry) def run_testing_farm_results_handler( - event: dict, package_config: dict, job_config: dict + event: dict, + package_config: dict, + job_config: dict, ): handler = TestingFarmResultsHandler( package_config=load_package_config(package_config), @@ -356,7 +370,9 @@ def run_pull_from_upstream_handler( @celery_app.task( - name=TaskName.upstream_koji_build, base=TaskWithRetry, queue="long-running" + name=TaskName.upstream_koji_build, + base=TaskWithRetry, + queue="long-running", ) def run_koji_build_handler(event: dict, package_config: dict, job_config: dict): handler = KojiBuildHandler( @@ -378,10 +394,14 @@ def run_koji_build_report_handler(event: dict, package_config: dict, job_config: @celery_app.task( - name=TaskName.sync_from_downstream, base=TaskWithRetry, queue="long-running" + name=TaskName.sync_from_downstream, + base=TaskWithRetry, + queue="long-running", ) def run_sync_from_downstream_handler( - event: dict, package_config: dict, job_config: dict + event: dict, + package_config: dict, + job_config: dict, ): handler = SyncFromDownstream( package_config=load_package_config(package_config), @@ -439,7 +459,9 @@ def run_retrigger_downstream_koji_build( @celery_app.task(name=TaskName.downstream_koji_build_report, base=TaskWithRetry) def run_downstream_koji_build_report( - event: dict, package_config: dict, job_config: dict + event: dict, + package_config: dict, + job_config: dict, ): handler = KojiBuildReportHandler( package_config=load_package_config(package_config), @@ -559,7 +581,10 @@ def run_vm_image_build(self, event: dict, package_config: dict, job_config: dict @celery_app.task(name=TaskName.vm_image_build_result, base=TaskWithRetry) def run_vm_image_build_result( - self, event: dict, package_config: dict, job_config: dict + self, + event: dict, + package_config: dict, + job_config: dict, ): handler = VMImageBuildResultHandler( package_config=load_package_config(package_config), @@ -583,7 +608,7 @@ def babysit_vm_image_build(self, build_id: int): model = VMImageBuildTargetModel.get_by_build_id(build_id) if not update_vm_image_build(build_id, model): raise PackitVMImageBuildTimeoutException( - f"No feedback for vm image build id={build_id} yet" + f"No feedback for vm image build id={build_id} yet", ) @@ -599,7 +624,10 @@ def run_koji_build_tag_handler(event: dict, package_config: dict, job_config: di @celery_app.task(bind=True, name=TaskName.tag_into_sidetag, base=TaskWithRetry) def run_tag_into_sidetag_handler( - self, event: dict, package_config: dict, job_config: dict + self, + event: dict, + package_config: dict, + job_config: dict, ): handler = TagIntoSidetagHandler( package_config=load_package_config(package_config), @@ -674,7 +702,7 @@ def run_check_onboarded_projects() -> None: known_onboarded_projects = GitProjectModel.get_known_onboarded_downstream_projects() downstream_synced_projects = SyncReleaseTargetModel.get_all_downstream_projects() almost_onboarded_projects = downstream_synced_projects.difference( - known_onboarded_projects + known_onboarded_projects, ) check_onboarded_projects(almost_onboarded_projects) @@ -688,7 +716,7 @@ def _get_usage_interval_data(days, hours, count) -> None: :param count: number of intervals """ logger.debug( - f"Starting collecting statistics for days={days}, hours={hours}, count={count}" + f"Starting collecting statistics for days={days}, hours={hours}, count={count}", ) delta = timedelta(days=days, hours=hours) @@ -699,10 +727,12 @@ def _get_usage_interval_data(days, hours, count) -> None: current_date -= delta logger.debug( - f"Getting usage data datetime_from {USAGE_DATE_IN_THE_PAST} datetime_to {days_legend[-1]}" + f"Getting usage data datetime_from {USAGE_DATE_IN_THE_PAST} datetime_to {days_legend[-1]}", ) get_usage_data( - datetime_from=USAGE_DATE_IN_THE_PAST, datetime_to=days_legend[-1], top=100000 + datetime_from=USAGE_DATE_IN_THE_PAST, + datetime_to=days_legend[-1], + top=100000, ) logger.debug("Got usage data.") @@ -715,7 +745,7 @@ def _get_usage_interval_data(days, hours, count) -> None: logger.warn("Got usage data.") logger.debug( - f"Done collecting statistics for days={days}, hours={hours}, count={count}" + f"Done collecting statistics for days={days}, hours={hours}, count={count}", ) diff --git a/ruff.toml b/ruff.toml index c9b771f2d..91728d202 100644 --- a/ruff.toml +++ b/ruff.toml @@ -1,7 +1,7 @@ select = [ "B", # flake8-bugbear "C4", # flake8-comprehensions - # "COM", # flake8-commas + "COM", # flake8-commas # "E", # pycodestyle Error # "F", # Pyflakes # "I", # isort diff --git a/tests/conftest.py b/tests/conftest.py index 21fb31dfc..408ca1168 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -155,7 +155,9 @@ def mock_set_url(url): srpm_build.should_receive("get_project_event_model").and_return(project_event_model) run_model = flexmock( - id=3, job_project_event=project_event_model, srpm_build=srpm_build + id=3, + job_project_event=project_event_model, + srpm_build=srpm_build, ) runs.append(run_model) @@ -200,7 +202,10 @@ def __init__(self, **kwargs): runs = [] srpm_build = flexmock( - logs="asdsdf", url=None, runs=runs, status=BuildStatus.success + logs="asdsdf", + url=None, + runs=runs, + status=BuildStatus.success, ) copr_group = flexmock(runs=runs) copr_build = flexmock( @@ -222,7 +227,7 @@ def __init__(self, **kwargs): "release": "1", "arch": "noarch", "epoch": 0, - } + }, ], task_accepted_time=datetime.now(), build_start_time=None, @@ -272,7 +277,9 @@ def copr_build_pr(): @pytest.fixture() def koji_build_pr(): project_model = flexmock( - repo_name="bar", namespace="foo", project_url="https://github.com/foo/bar" + repo_name="bar", + namespace="foo", + project_url="https://github.com/foo/bar", ) pr_model = flexmock( id=1, @@ -305,7 +312,7 @@ def koji_build_pr(): koji_build_model.get_project_event_object = lambda: pr_model koji_build_model.get_srpm_build = lambda: srpm_build koji_build_model.should_receive("get_project_event_model").and_return( - project_event_model + project_event_model, ) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( @@ -363,10 +370,12 @@ def add_pull_request_event_with_pr_id_9(): .mock() ) flexmock(PullRequestModel).should_receive("get_by_id").with_args(9).and_return( - db_project_object + db_project_object, ) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.pull_request, event_id=9, commit_sha="12345" + type=ProjectEventModelType.pull_request, + event_id=9, + commit_sha="12345", ).and_return(db_project_event) flexmock(PullRequestModel).should_receive("get_or_create").with_args( pr_id=9, @@ -393,10 +402,12 @@ def add_pull_request_event_with_sha_0011223344(): .mock() ) flexmock(PullRequestModel).should_receive("get_by_id").with_args(9).and_return( - db_project_object + db_project_object, ) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.pull_request, event_id=9, commit_sha="0011223344" + type=ProjectEventModelType.pull_request, + event_id=9, + commit_sha="0011223344", ).and_return(db_project_event) flexmock(PullRequestModel).should_receive("get_or_create").with_args( pr_id=9, @@ -433,7 +444,7 @@ def github_push_webhook(): @pytest.fixture(scope="module") def github_vm_image_build_comment(): with open( - DATA_DIR / "webhooks" / "github" / "vm_image_build_comment.json" + DATA_DIR / "webhooks" / "github" / "vm_image_build_comment.json", ) as outfile: return json.load(outfile) @@ -599,5 +610,5 @@ def mock_get_fast_forward_aliases(): "fedora-latest-stable": ["fedora-40"], "fedora-branched": ["fedora-39", "fedora-40"], "epel-all": ["epel-8", "epel-9"], - } + }, ) diff --git a/tests/integration/test_babysit.py b/tests/integration/test_babysit.py index 767c76115..269a357e5 100644 --- a/tests/integration/test_babysit.py +++ b/tests/integration/test_babysit.py @@ -41,14 +41,14 @@ def test_check_copr_build_no_build(): flexmock(CoprBuildTargetModel).should_receive("get_all_by_build_id").with_args( - 1 + 1, ).and_return([]) assert check_copr_build(build_id=1) def test_check_copr_build_not_started(): flexmock(CoprBuildTargetModel).should_receive("get_all_by_build_id").with_args( - 1 + 1, ).and_return([flexmock()]) flexmock(Client).should_receive("create_from_config_file").and_return( flexmock( @@ -56,25 +56,25 @@ def test_check_copr_build_not_started(): .should_receive("get") .with_args(1) .and_return(flexmock(ended_on=False, started_on=False)) - .mock() - ) + .mock(), + ), ) assert not check_copr_build(build_id=1) def test_check_copr_build_already_successful(): flexmock(CoprBuildTargetModel).should_receive("get_all_by_build_id").with_args( - 1 + 1, ).and_return( [ flexmock( status=BuildStatus.success, build_submitted_time=datetime.datetime.utcnow(), - ) - ] + ), + ], ) flexmock(SRPMBuildModel).should_receive("get_by_copr_build_id").and_return( - flexmock(status=BuildStatus.success) + flexmock(status=BuildStatus.success), ) flexmock(Client).should_receive("create_from_config_file").and_return( flexmock( @@ -82,8 +82,8 @@ def test_check_copr_build_already_successful(): .should_receive("get") .with_args(1) .and_return(flexmock(ended_on="timestamp", state="completed")) - .mock() - ) + .mock(), + ), ) assert check_copr_build(build_id=1) @@ -97,7 +97,9 @@ def test_check_copr_build_already_successful(): ], ) def test_check_copr_build_updated( - add_pull_request_event_with_sha_123456, build_status, build_ended_on + add_pull_request_event_with_sha_123456, + build_status, + build_ended_on, ): db_project_object, db_project_event = add_pull_request_event_with_sha_123456 db_build = ( @@ -124,16 +126,16 @@ def test_check_copr_build_updated( ) flexmock(db_build).should_receive("get_package_name").and_return(None) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "the-owner", "copr_url": "https://dummy.url"}) + Client(config={"username": "the-owner", "copr_url": "https://dummy.url"}), ) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - db_build + db_build, ) flexmock(CoprBuildTargetModel).should_receive("get_all_by_build_id").with_args( - 1 + 1, ).and_return([db_build]) flexmock(SRPMBuildModel).should_receive("get_by_copr_build_id").and_return( - flexmock(status=BuildStatus.success) + flexmock(status=BuildStatus.success), ) flexmock(Client).should_receive("create_from_config_file").and_return( flexmock( @@ -149,7 +151,7 @@ def test_check_copr_build_updated( "name": "source_package_name", "url": "https://some.host/my.srpm", }, - ) + ), ) .mock(), build_chroot_proxy=flexmock() @@ -157,7 +159,7 @@ def test_check_copr_build_updated( .with_args(1, "the-target") .and_return(flexmock(ended_on="timestamp", state="succeeded")) .mock(), - ) + ), ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( PackageConfig( @@ -166,10 +168,10 @@ def test_check_copr_build_updated( type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], packages={"package": CommonPackageConfig()}, - ) + ), ) flexmock(CoprBuildEndHandler).should_receive("run_job").and_return().once() assert check_copr_build(build_id=1) is bool(build_ended_on) @@ -202,16 +204,16 @@ def test_check_copr_build_waiting_started(add_pull_request_event_with_sha_123456 ) flexmock(db_build).should_receive("get_package_name").and_return(None) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "the-owner", "copr_url": "https://dummy.url"}) + Client(config={"username": "the-owner", "copr_url": "https://dummy.url"}), ) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - db_build + db_build, ) flexmock(CoprBuildTargetModel).should_receive("get_all_by_build_id").with_args( - 1 + 1, ).and_return([db_build]) flexmock(SRPMBuildModel).should_receive("get_by_copr_build_id").and_return( - flexmock(status=BuildStatus.success) + flexmock(status=BuildStatus.success), ) flexmock(Client).should_receive("create_from_config_file").and_return( flexmock( @@ -227,17 +229,17 @@ def test_check_copr_build_waiting_started(add_pull_request_event_with_sha_123456 "name": "source_package_name", "url": "https://some.host/my.srpm", }, - ) + ), ) .mock(), build_chroot_proxy=flexmock() .should_receive("get") .with_args(1, "the-target") .and_return( - flexmock(started_on="timestamp", ended_on=None, state="succeeded") + flexmock(started_on="timestamp", ended_on=None, state="succeeded"), ) .mock(), - ) + ), ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( PackageConfig( @@ -246,10 +248,10 @@ def test_check_copr_build_waiting_started(add_pull_request_event_with_sha_123456 type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], packages={"package": CommonPackageConfig()}, - ) + ), ) flexmock(CoprBuildStartHandler).should_receive("run_job").and_return().once() assert not check_copr_build(build_id=1) @@ -282,13 +284,13 @@ def test_check_copr_build_waiting_srpm_failed(add_pull_request_event_with_sha_12 ) flexmock(db_build).should_receive("get_package_name").and_return(None) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "the-owner", "copr_url": "https://dummy.url"}) + Client(config={"username": "the-owner", "copr_url": "https://dummy.url"}), ) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - db_build + db_build, ) flexmock(CoprBuildTargetModel).should_receive("get_all_by_build_id").and_return( - [db_build] + [db_build], ).times(3) flexmock(SRPMBuildModel).should_receive("get_by_copr_build_id").and_return( flexmock( @@ -304,7 +306,7 @@ def test_check_copr_build_waiting_srpm_failed(add_pull_request_event_with_sha_12 .mock() .should_receive("get_package_name") .and_return(None) - .mock() + .mock(), ) flexmock(Client).should_receive("create_from_config_file").and_return( flexmock( @@ -322,7 +324,7 @@ def test_check_copr_build_waiting_srpm_failed(add_pull_request_event_with_sha_12 "name": "source_package_name", "url": "https://some.host/my.srpm", }, - ) + ), ) .mock() .should_receive("get_source_chroot") @@ -333,10 +335,10 @@ def test_check_copr_build_waiting_srpm_failed(add_pull_request_event_with_sha_12 .should_receive("get") .with_args(1, "the-target") .and_return( - flexmock(started_on="timestamp", ended_on=None, state="succeeded") + flexmock(started_on="timestamp", ended_on=None, state="succeeded"), ) .mock(), - ) + ), ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( PackageConfig( @@ -345,10 +347,10 @@ def test_check_copr_build_waiting_srpm_failed(add_pull_request_event_with_sha_12 type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], packages={"package": CommonPackageConfig()}, - ) + ), ) flexmock(CoprBuildEndHandler).should_receive("run_job").and_return().once() flexmock(CoprBuildStartHandler).should_receive("run_job").and_return().once() @@ -384,16 +386,16 @@ def test_check_copr_build_waiting_already_started( ) flexmock(db_build).should_receive("get_package_name").and_return(None) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "the-owner", "copr_url": "https://dummy.url"}) + Client(config={"username": "the-owner", "copr_url": "https://dummy.url"}), ) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - db_build + db_build, ) flexmock(CoprBuildTargetModel).should_receive("get_all_by_build_id").with_args( - 1 + 1, ).and_return([db_build]) flexmock(SRPMBuildModel).should_receive("get_by_copr_build_id").and_return( - flexmock(status=BuildStatus.success) + flexmock(status=BuildStatus.success), ) flexmock(Client).should_receive("create_from_config_file").and_return( flexmock( @@ -409,17 +411,17 @@ def test_check_copr_build_waiting_already_started( "name": "source_package_name", "url": "https://some.host/my.srpm", }, - ) + ), ) .mock(), build_chroot_proxy=flexmock() .should_receive("get") .with_args(1, "the-target") .and_return( - flexmock(started_on="timestamp", ended_on=None, state="succeeded") + flexmock(started_on="timestamp", ended_on=None, state="succeeded"), ) .mock(), - ) + ), ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( PackageConfig( @@ -428,10 +430,10 @@ def test_check_copr_build_waiting_already_started( type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], packages={"package": CommonPackageConfig()}, - ) + ), ) flexmock(CoprBuildStartHandler).should_receive("run_job").and_return().never() assert not check_copr_build(build_id=1) @@ -444,15 +446,15 @@ def test_check_copr_build_not_exists(): .should_receive("get") .with_args(1) .and_raise(CoprNoResultException, "Build 1 does not exist") - .mock() - ) + .mock(), + ), ) builds = [] for i in range(2): builds.append(flexmock(status=BuildStatus.pending, build_id=1)) builds[i].should_receive("set_status").with_args(BuildStatus.error).once() flexmock(CoprBuildTargetModel).should_receive("get_all_by_status").with_args( - BuildStatus.pending + BuildStatus.pending, ).and_return(builds) check_pending_copr_builds() @@ -471,7 +473,7 @@ def test_check_update_copr_builds_timeout(): "name": "source_package_name", "url": "https://some.host/my.srpm", }, - ) + ), ) .mock(), build_chroot_proxy=flexmock() @@ -479,7 +481,7 @@ def test_check_update_copr_builds_timeout(): .with_args(1, "the-target") .and_return(flexmock(ended_on="timestamp", state="succeeded")) .mock(), - ) + ), ) build = flexmock( status=BuildStatus.pending, @@ -489,20 +491,20 @@ def test_check_update_copr_builds_timeout(): build.should_receive("set_status").with_args(BuildStatus.error).once() flexmock(CoprBuildTargetModel).should_receive("get_all_by_status").with_args( - BuildStatus.pending + BuildStatus.pending, ).and_return([build]) flexmock(SRPMBuildModel).should_receive("get_by_copr_build_id").and_return( - flexmock(status=BuildStatus.success) + flexmock(status=BuildStatus.success), ) update_copr_builds(1, [build]) def test_check_pending_copr_builds_no_builds(): flexmock(CoprBuildTargetModel).should_receive("get_all_by_status").with_args( - BuildStatus.pending + BuildStatus.pending, ).and_return([]) flexmock(packit_service.worker.helpers.build.babysit).should_receive( - "update_copr_builds" + "update_copr_builds", ).never() check_pending_copr_builds() @@ -512,20 +514,22 @@ def test_check_pending_copr_builds(): build2 = flexmock(status=BuildStatus.pending, build_id="2") build3 = flexmock(status=BuildStatus.pending, build_id="1") flexmock(CoprBuildTargetModel).should_receive("get_all_by_status").with_args( - BuildStatus.pending + BuildStatus.pending, ).and_return([build1, build2, build3]) flexmock(packit_service.worker.helpers.build.babysit).should_receive( - "update_copr_builds" + "update_copr_builds", ).with_args(1, [build1, build3]).once() flexmock(packit_service.worker.helpers.build.babysit).should_receive( - "update_copr_builds" + "update_copr_builds", ).with_args(2, [build2]).once() check_pending_copr_builds() def test_check_pending_testing_farm_runs_no_runs(): flexmock(TFTTestRunTargetModel).should_receive("get_all_by_status").with_args( - TestingFarmResult.new, TestingFarmResult.queued, TestingFarmResult.running + TestingFarmResult.new, + TestingFarmResult.queued, + TestingFarmResult.running, ).and_return([]) # No request should be performed flexmock(requests).should_receive("get").never() @@ -564,15 +568,17 @@ def test_check_pending_testing_farm_runs(created): job_config_trigger_type=JobConfigTriggerType.pull_request, project_event_model_type=ProjectEventModelType.pull_request, id=123, - ) + ), ) .mock() ) flexmock(TFTTestRunTargetModel).should_receive("get_all_by_status").with_args( - TestingFarmResult.new, TestingFarmResult.queued, TestingFarmResult.running + TestingFarmResult.new, + TestingFarmResult.queued, + TestingFarmResult.running, ).and_return([run]).once() flexmock(TFTTestRunTargetModel).should_receive("get_by_pipeline_id").with_args( - pipeline_id=pipeline_id + pipeline_id=pipeline_id, ).and_return(run) url = "https://api.dev.testing-farm.io/v0.1/requests/1" flexmock(requests).should_receive("get").with_args(url).and_return( @@ -583,7 +589,7 @@ def test_check_pending_testing_farm_runs(created): "created": "2021-11-01 17:22:36.061250", }, ok=lambda: True, - ) + ), ).once() flexmock(TestingFarmResultsEvent).should_receive("get_packages_config").and_return( PackageConfig( @@ -592,10 +598,10 @@ def test_check_pending_testing_farm_runs(created): type=JobType.tests, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], packages={"package": CommonPackageConfig()}, - ) + ), ) flexmock(TestingFarmResultsHandler).should_receive("run_job").and_return().once() check_pending_testing_farm_runs() @@ -613,7 +619,9 @@ def test_check_pending_testing_farm_runs_timeout(status): ) run.should_receive("set_status").with_args(TestingFarmResult.error).once() flexmock(TFTTestRunTargetModel).should_receive("get_all_by_status").with_args( - TestingFarmResult.new, TestingFarmResult.queued, TestingFarmResult.running + TestingFarmResult.new, + TestingFarmResult.queued, + TestingFarmResult.running, ).and_return([run]).once() check_pending_testing_farm_runs() @@ -646,15 +654,17 @@ def test_check_pending_testing_farm_runs_identifiers(identifier): job_config_trigger_type=JobConfigTriggerType.pull_request, project_event_model_type=ProjectEventModelType.pull_request, id=123, - ) + ), ) .mock() ) flexmock(TFTTestRunTargetModel).should_receive("get_all_by_status").with_args( - TestingFarmResult.new, TestingFarmResult.queued, TestingFarmResult.running + TestingFarmResult.new, + TestingFarmResult.queued, + TestingFarmResult.running, ).and_return([run]).once() flexmock(TFTTestRunTargetModel).should_receive("get_by_pipeline_id").with_args( - pipeline_id=pipeline_id + pipeline_id=pipeline_id, ).and_return(run) url = "https://api.dev.testing-farm.io/v0.1/requests/1" flexmock(requests).should_receive("get").with_args(url).and_return( @@ -665,7 +675,7 @@ def test_check_pending_testing_farm_runs_identifiers(identifier): "created": "2021-11-01 17:22:36.061250", }, ok=lambda: True, - ) + ), ).once() flexmock(TestingFarmResultsEvent).should_receive("get_packages_config").and_return( PackageConfig( @@ -676,7 +686,7 @@ def test_check_pending_testing_farm_runs_identifiers(identifier): packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, ), JobConfig( @@ -685,7 +695,7 @@ def test_check_pending_testing_farm_runs_identifiers(identifier): packages={ "package": CommonPackageConfig( identifier="second", - ) + ), }, ), JobConfig( @@ -695,7 +705,7 @@ def test_check_pending_testing_farm_runs_identifiers(identifier): ), ], packages={"package": CommonPackageConfig()}, - ) + ), ) flexmock(TestingFarmResultsHandler).should_receive("run_job").and_return().once() check_pending_testing_farm_runs() diff --git a/tests/integration/test_bodhi_update.py b/tests/integration/test_bodhi_update.py index eedef7236..78bff39aa 100644 --- a/tests/integration/test_bodhi_update.py +++ b/tests/integration/test_bodhi_update.py @@ -64,13 +64,16 @@ def test_bodhi_update_for_unknown_koji_build(koji_build_completed_old_format): default_branch="main", ) pagure_project.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["packit.spec"]) pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["packit.spec", ".packit.yaml"]) flexmock(LocalProject, refresh_the_arguments=lambda: None) @@ -93,10 +96,10 @@ def test_bodhi_update_for_unknown_koji_build(koji_build_completed_old_format): project_event_model_type=ProjectEventModelType.branch_push, ) flexmock(KojiBuildTargetModel).should_receive("get_by_task_id").with_args( - 79721403 + 79721403, ).and_return(None) flexmock(GitBranchModel).should_receive("get_or_create").and_return( - git_branch_model_flexmock + git_branch_model_flexmock, ) flexmock(PipelineModel).should_receive("create").and_return(run_model_flexmock) group_model = flexmock( @@ -111,7 +114,7 @@ def test_bodhi_update_for_unknown_koji_build(koji_build_completed_old_format): set_web_url=lambda x: None, set_alias=lambda x: None, set_update_creation_time=lambda x: None, - ) + ), ], ) flexmock(ProjectEventModel).should_receive("get_or_create") @@ -137,7 +140,7 @@ def test_bodhi_update_for_unknown_koji_build(koji_build_completed_old_format): assert len(processing_results) == 2 processing_results.pop() event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) results = run_bodhi_update( @@ -163,13 +166,16 @@ def test_bodhi_update_for_unknown_koji_build_failed(koji_build_completed_old_for default_branch="main", ) pagure_project_mock.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["packit.spec"]) pagure_project_mock.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project_mock.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["packit.spec", ".packit.yaml"]) flexmock(Pushgateway).should_receive("push").times(1).and_return() @@ -195,10 +201,10 @@ def test_bodhi_update_for_unknown_koji_build_failed(koji_build_completed_old_for project_event_model_type=ProjectEventModelType.branch_push, ) flexmock(KojiBuildTargetModel).should_receive("get_by_task_id").with_args( - 79721403 + 79721403, ).and_return(None) flexmock(GitBranchModel).should_receive("get_or_create").and_return( - git_branch_model_flexmock + git_branch_model_flexmock, ) flexmock(ProjectEventModel).should_receive("get_or_create") flexmock(PipelineModel).should_receive("create").and_return(run_model_flexmock) @@ -212,7 +218,7 @@ def test_bodhi_update_for_unknown_koji_build_failed(koji_build_completed_old_for set_status=lambda x: None, set_data=lambda x: None, set_web_url=lambda x: None, - ) + ), ], ) flexmock(BodhiUpdateGroupModel).should_receive("create").and_return(group_model) @@ -236,7 +242,7 @@ def test_bodhi_update_for_unknown_koji_build_failed(koji_build_completed_old_for assert len(processing_results) == 2 processing_results.pop() event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) with pytest.raises(PackitException): run_bodhi_update( @@ -263,13 +269,16 @@ def test_bodhi_update_for_unknown_koji_build_failed_issue_created( default_branch="main", ) pagure_project_mock.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["packit.spec"]) pagure_project_mock.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project_mock.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["packit.spec", ".packit.yaml"]) flexmock(Pushgateway).should_receive("push").times(2).and_return() @@ -289,7 +298,7 @@ def test_bodhi_update_for_unknown_koji_build_failed_issue_created( issue_project_mock = flexmock(GithubProject) issue_project_mock.should_receive("get_issue_list").and_return([]).once() issue_project_mock.should_receive("create_issue").and_return( - flexmock(id=3, url="https://github.com/namespace/project/issues/3") + flexmock(id=3, url="https://github.com/namespace/project/issues/3"), ).once() # Database structure @@ -300,10 +309,10 @@ def test_bodhi_update_for_unknown_koji_build_failed_issue_created( project_event_model_type=ProjectEventModelType.branch_push, ) flexmock(KojiBuildTargetModel).should_receive("get_by_task_id").with_args( - 79721403 + 79721403, ).and_return(None) flexmock(GitBranchModel).should_receive("get_or_create").and_return( - git_branch_model_flexmock + git_branch_model_flexmock, ) flexmock(PipelineModel).should_receive("create").and_return(run_model_flexmock) flexmock(ProjectEventModel).should_receive("get_or_create") @@ -316,8 +325,8 @@ def test_bodhi_update_for_unknown_koji_build_failed_issue_created( set_status=lambda x: None, set_data=lambda x: None, set_web_url=lambda x: None, - ) - ] + ), + ], ) flexmock(BodhiUpdateGroupModel).should_receive("create").and_return(group_model) flexmock(BodhiUpdateTargetModel).should_receive("create").with_args( @@ -340,7 +349,7 @@ def test_bodhi_update_for_unknown_koji_build_failed_issue_created( assert len(processing_results) == 2 processing_results.pop() event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) CreateBodhiUpdateHandler( package_config=load_package_config(package_config), @@ -371,13 +380,16 @@ def test_bodhi_update_for_unknown_koji_build_failed_issue_comment( default_branch="main", ) pagure_project_mock.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["packit.spec"]) pagure_project_mock.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project_mock.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["packit.spec", ".packit.yaml"]) flexmock(Pushgateway).should_receive("push").times(2).and_return() @@ -404,8 +416,8 @@ def test_bodhi_update_for_unknown_koji_build_failed_issue_comment( ) .should_receive("comment") .once() - .mock() - ] + .mock(), + ], ).once() issue_project_mock.should_receive("create_issue").times(0) @@ -417,10 +429,10 @@ def test_bodhi_update_for_unknown_koji_build_failed_issue_comment( project_event_model_type=ProjectEventModelType.branch_push, ) flexmock(KojiBuildTargetModel).should_receive("get_by_task_id").with_args( - 79721403 + 79721403, ).and_return(None) flexmock(GitBranchModel).should_receive("get_or_create").and_return( - git_branch_model_flexmock + git_branch_model_flexmock, ) flexmock(PipelineModel).should_receive("create").and_return(run_model_flexmock) flexmock(ProjectEventModel).should_receive("get_or_create") @@ -433,8 +445,8 @@ def test_bodhi_update_for_unknown_koji_build_failed_issue_comment( set_status=lambda x: None, set_data=lambda x: None, set_web_url=lambda x: None, - ) - ] + ), + ], ) flexmock(BodhiUpdateGroupModel).should_receive("create").and_return(group_model) flexmock(BodhiUpdateTargetModel).should_receive("create").with_args( @@ -457,7 +469,7 @@ def test_bodhi_update_for_unknown_koji_build_failed_issue_comment( assert len(processing_results) == 2 processing_results.pop() event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) CreateBodhiUpdateHandler( package_config=load_package_config(package_config), @@ -490,13 +502,16 @@ def test_bodhi_update_build_not_tagged_yet( default_branch="main", ) pagure_project_mock.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["packit.spec"]) pagure_project_mock.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project_mock.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["packit.spec", ".packit.yaml"]) flexmock(LocalProject, refresh_the_arguments=lambda: None) @@ -527,8 +542,8 @@ def test_bodhi_update_build_not_tagged_yet( set_status=lambda x: None, set_data=lambda x: None, set_web_url=lambda x: None, - ) - ] + ), + ], ) flexmock(BodhiUpdateGroupModel).should_receive("create").and_return(group_model) flexmock(BodhiUpdateTargetModel).should_receive("create").with_args( @@ -543,17 +558,18 @@ def test_bodhi_update_build_not_tagged_yet( project_event_model_type=ProjectEventModelType.branch_push, ) flexmock(KojiBuildTargetModel).should_receive("get_by_task_id").with_args( - 79721403 + 79721403, ).and_return( flexmock( get_project_event_object=lambda: flexmock( - id=1, job_config_trigger_type=JobConfigTriggerType.commit + id=1, + job_config_trigger_type=JobConfigTriggerType.commit, ), group_of_targets=flexmock(runs=[flexmock()]), - ) + ), ) flexmock(GitBranchModel).should_receive("get_or_create").and_return( - git_branch_model_flexmock + git_branch_model_flexmock, ) flexmock(PipelineModel).should_receive("create").and_return(run_model_flexmock) @@ -565,7 +581,7 @@ def test_bodhi_update_build_not_tagged_yet( assert len(processing_results) == 2 processing_results.pop() event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) celery_task = flexmock(CeleryTask) celery_task.should_receive("is_last_try").and_return(False) @@ -582,7 +598,7 @@ def test_bodhi_update_build_not_tagged_yet( sidetag=None, alias=None, ).and_return( - None + None, ) # tagged now results = run_bodhi_update( package_config=package_config, @@ -608,13 +624,16 @@ def test_bodhi_update_for_unknown_koji_build_not_for_unfinished( default_branch="main", ) pagure_project.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["packit.spec"]) pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["packit.spec", ".packit.yaml"]) flexmock(LocalProject, refresh_the_arguments=lambda: None) @@ -634,8 +653,8 @@ def test_bodhi_update_for_unknown_koji_build_not_for_unfinished( set_status=lambda x: None, set_data=lambda x: None, set_web_url=lambda x: None, - ) - ] + ), + ], ) flexmock(BodhiUpdateGroupModel).should_receive("create").and_return(group_model) flexmock(BodhiUpdateTargetModel).should_receive("create").with_args( @@ -651,10 +670,10 @@ def test_bodhi_update_for_unknown_koji_build_not_for_unfinished( project_event_model_type=ProjectEventModelType.branch_push, ) flexmock(KojiBuildTargetModel).should_receive("get_by_task_id").with_args( - 79721403 + 79721403, ).and_return(None) flexmock(GitBranchModel).should_receive("get_or_create").and_return( - git_branch_model_flexmock + git_branch_model_flexmock, ) flexmock(PipelineModel).should_receive("create").and_return(run_model_flexmock) flexmock(ProjectEventModel).should_receive("get_or_create") @@ -686,13 +705,16 @@ def test_bodhi_update_for_known_koji_build(koji_build_completed_old_format): default_branch="main", ) pagure_project.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["packit.spec"]) pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["packit.spec", ".packit.yaml"]) flexmock(LocalProject, refresh_the_arguments=lambda: None) @@ -717,8 +739,8 @@ def test_bodhi_update_for_known_koji_build(koji_build_completed_old_format): set_web_url=lambda x: None, set_alias=lambda x: None, set_update_creation_time=lambda x: None, - ) - ] + ), + ], ) flexmock(BodhiUpdateGroupModel).should_receive("create").and_return(group_model) flexmock(BodhiUpdateTargetModel).should_receive("create").with_args( @@ -730,14 +752,15 @@ def test_bodhi_update_for_known_koji_build(koji_build_completed_old_format): # Database structure flexmock(KojiBuildTargetModel).should_receive("get_by_task_id").with_args( - 79721403 + 79721403, ).and_return( flexmock( get_project_event_object=lambda: flexmock( - id=1, job_config_trigger_type=JobConfigTriggerType.commit + id=1, + job_config_trigger_type=JobConfigTriggerType.commit, ), group_of_targets=flexmock(runs=[flexmock()]), - ) + ), ) processing_results = SteveJobs().process_message(koji_build_completed_old_format) @@ -745,7 +768,7 @@ def test_bodhi_update_for_known_koji_build(koji_build_completed_old_format): assert len(processing_results) == 2 processing_results.pop() event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) results = run_bodhi_update( @@ -771,13 +794,16 @@ def test_bodhi_update_for_not_configured_branch(koji_build_completed_old_format) default_branch="main", ) pagure_project.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["packit.spec"]) pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["packit.spec", ".packit.yaml"]) flexmock(LocalProject, refresh_the_arguments=lambda: None) @@ -794,10 +820,10 @@ def test_bodhi_update_for_not_configured_branch(koji_build_completed_old_format) project_event_model_type=ProjectEventModelType.branch_push, ) flexmock(KojiBuildTargetModel).should_receive("get_by_task_id").with_args( - 79721403 + 79721403, ).and_return(None) flexmock(GitBranchModel).should_receive("get_or_create").and_return( - git_branch_model_flexmock + git_branch_model_flexmock, ) flexmock(PipelineModel).should_receive("create").and_return(run_model_flexmock) flexmock(KojiBuildTargetModel).should_receive("create").with_args( @@ -828,13 +854,16 @@ def test_bodhi_update_fedora_stable_by_default(koji_build_completed_f36): default_branch="main", ) pagure_project.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["packit.spec"]) pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["packit.spec", ".packit.yaml"]) flexmock(LocalProject, refresh_the_arguments=lambda: None) @@ -861,8 +890,8 @@ def test_bodhi_update_fedora_stable_by_default(koji_build_completed_f36): set_web_url=lambda x: None, set_alias=lambda x: None, set_update_creation_time=lambda x: None, - ) - ] + ), + ], ) flexmock(BodhiUpdateGroupModel).should_receive("create").and_return(group_model) flexmock(BodhiUpdateTargetModel).should_receive("create").with_args( @@ -872,14 +901,15 @@ def test_bodhi_update_fedora_stable_by_default(koji_build_completed_f36): bodhi_update_group=group_model, ).and_return() flexmock(KojiBuildTargetModel).should_receive("get_by_task_id").with_args( - 80860789 + 80860789, ).and_return( flexmock( get_project_event_object=lambda: flexmock( - id=1, job_config_trigger_type=JobConfigTriggerType.commit + id=1, + job_config_trigger_type=JobConfigTriggerType.commit, ), group_of_targets=flexmock(runs=[flexmock()]), - ) + ), ) processing_results = SteveJobs().process_message(koji_build_completed_f36) @@ -887,7 +917,7 @@ def test_bodhi_update_fedora_stable_by_default(koji_build_completed_f36): assert len(processing_results) == 2 processing_results.pop() event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) results = run_bodhi_update( @@ -904,7 +934,9 @@ def test_bodhi_update_fedora_stable_by_default(koji_build_completed_f36): [(False, None), (False, "FEDORA-2024-abcdef1234"), (True, None)], ) def test_bodhi_update_from_sidetag( - koji_build_tagged, missing_dependency, existing_update + koji_build_tagged, + missing_dependency, + existing_update, ): """(Sidetag scenario.)""" @@ -915,7 +947,7 @@ def test_bodhi_update_from_sidetag( sidetag_name = "f40-build-side-12345" flexmock(KojiHelper).should_receive("get_build_info").with_args( - build_id + build_id, ).and_return({"task_id": task_id}) sidetag_group = flexmock(name=sidetag_group_name) @@ -926,14 +958,14 @@ def test_bodhi_update_from_sidetag( delete=lambda: None, ) sidetag_group.should_receive("get_sidetag_by_target").with_args( - dg_branch + dg_branch, ).and_return(sidetag) flexmock(SidetagGroupModel).should_receive("get_by_name").with_args( - sidetag_group_name + sidetag_group_name, ).and_return(sidetag_group) flexmock(SidetagModel).should_receive("get_by_koji_name").with_args( - sidetag_name + sidetag_name, ).and_return(sidetag) builds_in_sidetag = [ @@ -945,11 +977,11 @@ def test_bodhi_update_from_sidetag( builds_in_sidetag.pop() flexmock(KojiHelper).should_receive("get_tag_info").with_args( - sidetag_name + sidetag_name, ).and_return({"name": sidetag_name}) flexmock(KojiHelper).should_receive("get_builds_in_tag").with_args( - sidetag_name + sidetag_name, ).and_return(builds_in_sidetag) flexmock(KojiHelper).should_receive("get_latest_stable_nvr").with_args( @@ -962,13 +994,13 @@ def test_bodhi_update_from_sidetag( ).and_return("packit-0.98.0-1.fc40") flexmock(KojiBuildTargetModel).should_receive("get_by_task_id").with_args( - task_id=task_id + task_id=task_id, ).and_return(flexmock(target=dg_branch, get_project_event_model=lambda: None)) flexmock(BodhiUpdateTargetModel).should_receive( - "get_first_successful_by_sidetag" + "get_first_successful_by_sidetag", ).with_args(sidetag_name).and_return( - flexmock(alias=existing_update) if existing_update else None + flexmock(alias=existing_update) if existing_update else None, ) specfile_packit_yaml = ( @@ -985,20 +1017,24 @@ def test_bodhi_update_from_sidetag( default_branch="main", ) specfile_pagure_project.should_receive("get_files").with_args( - ref=None, filter_regex=r".+\.spec$" + ref=None, + filter_regex=r".+\.spec$", ).and_return(["python-specfile.spec"]) specfile_pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref=None + path=".packit.yaml", + ref=None, ).and_return(specfile_packit_yaml) specfile_pagure_project.should_receive("get_files").with_args( - ref=None, recursive=False + ref=None, + recursive=False, ).and_return(["python-specfile.spec", ".packit.yaml"]) flexmock(ServiceConfig).should_receive("get_project").with_args( - url="https://src.fedoraproject.org/rpms/python-specfile" + url="https://src.fedoraproject.org/rpms/python-specfile", ).and_return(specfile_pagure_project) flexmock(ServiceConfig).should_receive("get_project").with_args( - url="https://src.fedoraproject.org/rpms/python-specfile", required=True + url="https://src.fedoraproject.org/rpms/python-specfile", + required=True, ).and_return(specfile_pagure_project) packit_packit_yaml = ( @@ -1015,17 +1051,20 @@ def test_bodhi_update_from_sidetag( default_branch="main", ) packit_pagure_project.should_receive("get_files").with_args( - ref=None, filter_regex=r".+\.spec$" + ref=None, + filter_regex=r".+\.spec$", ).and_return(["packit.spec"]) packit_pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref=None + path=".packit.yaml", + ref=None, ).and_return(packit_packit_yaml) packit_pagure_project.should_receive("get_files").with_args( - ref=None, recursive=False + ref=None, + recursive=False, ).and_return(["packit.spec", ".packit.yaml"]) flexmock(ServiceConfig).should_receive("get_project").with_args( - url="https://src.fedoraproject.org/rpms/packit" + url="https://src.fedoraproject.org/rpms/packit", ).and_return(packit_pagure_project) flexmock(group).should_receive("apply_async").once() @@ -1041,7 +1080,9 @@ def test_bodhi_update_from_sidetag( ).and_return(flexmock(id=1, project_event_model_type="koji_build_tag")) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type="koji_build_tag", event_id=1, commit_sha=None + type="koji_build_tag", + event_id=1, + commit_sha=None, ).and_return(flexmock()) flexmock(LocalProject, refresh_the_arguments=lambda: None) @@ -1060,7 +1101,7 @@ def _create_update(dist_git_branch, update_type, koji_builds, sidetag, alias): return "alias", "url" flexmock(PackitAPI).should_receive("create_update").replace_with( - _create_update + _create_update, ).times(0 if missing_dependency else 1) flexmock(PipelineModel).should_receive("create").and_return(flexmock()) @@ -1075,8 +1116,8 @@ def _create_update(dist_git_branch, update_type, koji_builds, sidetag, alias): set_web_url=lambda x: None, set_alias=lambda x: None, set_update_creation_time=lambda x: None, - ) - ] + ), + ], ) flexmock(BodhiUpdateGroupModel).should_receive("create").and_return(group_model) @@ -1094,7 +1135,7 @@ def _create(target, koji_nvrs, sidetag, status, bodhi_update_group): processing_results = SteveJobs().process_message(koji_build_tagged) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) diff --git a/tests/integration/test_check_rerun.py b/tests/integration/test_check_rerun.py index 932c09974..ea9e20052 100644 --- a/tests/integration/test_check_rerun.py +++ b/tests/integration/test_check_rerun.py @@ -49,14 +49,14 @@ @pytest.fixture(scope="module") def check_rerun_event_testing_farm(): return json.loads( - (DATA_DIR / "webhooks" / "github" / "checkrun_rerequested.json").read_text() + (DATA_DIR / "webhooks" / "github" / "checkrun_rerequested.json").read_text(), ) @pytest.fixture(scope="module") def check_rerun_event_copr_build(): event = json.loads( - (DATA_DIR / "webhooks" / "github" / "checkrun_rerequested.json").read_text() + (DATA_DIR / "webhooks" / "github" / "checkrun_rerequested.json").read_text(), ) event["check_run"]["name"] = "rpm-build:fedora-rawhide-x86_64" return event @@ -65,7 +65,7 @@ def check_rerun_event_copr_build(): @pytest.fixture(scope="module") def check_rerun_event_koji_build(): event = json.loads( - (DATA_DIR / "webhooks" / "github" / "checkrun_rerequested.json").read_text() + (DATA_DIR / "webhooks" / "github" / "checkrun_rerequested.json").read_text(), ) event["check_run"]["name"] = "koji-build:f34" return event @@ -74,7 +74,7 @@ def check_rerun_event_koji_build(): @pytest.fixture(scope="module") def check_rerun_event_koji_build_push(): event = json.loads( - (DATA_DIR / "webhooks" / "github" / "checkrun_rerequested.json").read_text() + (DATA_DIR / "webhooks" / "github" / "checkrun_rerequested.json").read_text(), ) event["check_run"]["name"] = "koji-build:main:f34" return event @@ -83,7 +83,7 @@ def check_rerun_event_koji_build_push(): @pytest.fixture(scope="module") def check_rerun_event_propose_downstream(): event = json.loads( - (DATA_DIR / "webhooks" / "github" / "checkrun_rerequested.json").read_text() + (DATA_DIR / "webhooks" / "github" / "checkrun_rerequested.json").read_text(), ) event["check_run"]["name"] = "propose-downstream:f34" return event @@ -122,10 +122,10 @@ def mock_pr_functionality(request): ) flexmock(LocalProject, refresh_the_arguments=lambda: None) flexmock(ProjectEventModel).should_receive("get_or_create").and_return( - project_event + project_event, ) flexmock(ProjectEventModel).should_receive("get_by_id").with_args( - 123456 + 123456, ).and_return(project_event) flexmock(PullRequestModel).should_receive("get_or_create").with_args( pr_id=123, @@ -134,7 +134,7 @@ def mock_pr_functionality(request): project_url="https://github.com/packit/hello-world", ).and_return(pr_model) flexmock(PullRequestModel).should_receive("get_by_id").with_args(123).and_return( - pr_model + pr_model, ) @@ -172,10 +172,10 @@ def mock_push_functionality(request): flexmock(LocalProject, refresh_the_arguments=lambda: None) flexmock(ProjectEventModel).should_receive("get_or_create").and_return( - project_event + project_event, ) flexmock(ProjectEventModel).should_receive("get_by_id").with_args( - 123456 + 123456, ).and_return(project_event) flexmock(GitBranchModel).should_receive("get_or_create").with_args( branch_name="main", @@ -184,7 +184,7 @@ def mock_push_functionality(request): project_url="https://github.com/packit/hello-world", ).and_return(branch_model) flexmock(GitBranchModel).should_receive("get_by_id").with_args(123).and_return( - branch_model + branch_model, ) @@ -221,13 +221,13 @@ def mock_release_functionality(request): ) flexmock(LocalProject, refresh_the_arguments=lambda: None) flexmock(ProjectEventModel).should_receive("get_by_id").with_args( - 123456 + 123456, ).and_return(project_event) flexmock(ProjectEventModel).should_receive("get_or_create").and_return( - project_event + project_event, ) flexmock(ProjectReleaseModel).should_receive("get_by_id").with_args(123).and_return( - release_model + release_model, ) flexmock(ProjectReleaseModel).should_receive("get_or_create").with_args( tag_name="0.1.0", @@ -253,13 +253,14 @@ def mock_release_functionality(request): "job": "copr_build", "metadata": {"targets": "fedora-all"}, }, - ] + ], ] ), indirect=True, ) def test_check_rerun_pr_testing_farm_handler( - mock_pr_functionality, check_rerun_event_testing_farm + mock_pr_functionality, + check_rerun_event_testing_farm, ): run = flexmock(test_run_group=None) build = flexmock(status=BuildStatus.success, group_of_targets=flexmock(runs=[run])) @@ -269,25 +270,25 @@ def test_check_rerun_pr_testing_farm_handler( target="fedora-rawhide-x86_64", ) flexmock(TFTTestRunGroupModel).should_receive("create").with_args([run]).and_return( - flexmock(grouped_targets=[test]) + flexmock(grouped_targets=[test]), ) flexmock(TFTTestRunTargetModel).should_receive("create").and_return(test) flexmock(TestingFarmJobHelper).should_receive("run_testing_farm").once().and_return( - TaskResults(success=True, details={}) + TaskResults(success=True, details={}), ) flexmock(GithubProject).should_receive("get_files").and_return(["foo.spec"]) flexmock(GithubProject).should_receive("get_files").and_return( - ["foo.spec", ".packit.yaml"] + ["foo.spec", ".packit.yaml"], ) flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/the-namespace/the-repo" + "https://github.com/the-namespace/the-repo", ) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(TestingFarmJobHelper).should_receive("get_latest_copr_build").and_return( - build + build, ) flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( - {"fedora-rawhide-x86_64", "fedora-34-x86_64"} + {"fedora-rawhide-x86_64", "fedora-34-x86_64"}, ) flexmock(StatusReporterGithubChecks).should_receive("set_status").with_args( state=BaseCommitStatus.pending, @@ -302,7 +303,7 @@ def test_check_rerun_pr_testing_farm_handler( processing_results = SteveJobs().process_message(check_rerun_event_testing_farm) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) assert event_dict["tests_targets_override"] == ["fedora-rawhide-x86_64"] @@ -323,28 +324,29 @@ def test_check_rerun_pr_testing_farm_handler( "trigger": "pull_request", "job": "upstream_koji_build", "metadata": {"targets": "fedora-all", "scratch": "true"}, - } - ] + }, + ], ] ), indirect=True, ) def test_check_rerun_pr_koji_build_handler( - mock_pr_functionality, check_rerun_event_koji_build + mock_pr_functionality, + check_rerun_event_koji_build, ): flexmock(KojiBuildJobHelper).should_receive("run_koji_build").and_return( - TaskResults(success=True, details={}) + TaskResults(success=True, details={}), ) flexmock(GithubProject).should_receive("get_files").and_return(["foo.spec"]) flexmock(GithubProject).should_receive("get_files").and_return( - ["foo.spec", ".packit.yaml"] + ["foo.spec", ".packit.yaml"], ) flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/the-namespace/the-repo" + "https://github.com/the-namespace/the-repo", ) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(koji_build).should_receive("get_koji_targets").and_return( - {"rawhide", "f34"} + {"rawhide", "f34"}, ) flexmock(StatusReporterGithubChecks).should_receive("set_status").with_args( state=BaseCommitStatus.pending, @@ -359,7 +361,7 @@ def test_check_rerun_pr_koji_build_handler( processing_results = SteveJobs().process_message(check_rerun_event_koji_build) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) assert event_dict["build_targets_override"] == ["f34"] @@ -381,28 +383,29 @@ def test_check_rerun_pr_koji_build_handler( "trigger": "pull_request", "job": "production_build", "metadata": {"targets": "fedora-all", "scratch": "true"}, - } - ] + }, + ], ] ), indirect=True, ) def test_check_rerun_pr_koji_build_handler_old_job_name( - mock_pr_functionality, check_rerun_event_koji_build + mock_pr_functionality, + check_rerun_event_koji_build, ): flexmock(KojiBuildJobHelper).should_receive("run_koji_build").and_return( - TaskResults(success=True, details={}) + TaskResults(success=True, details={}), ) flexmock(GithubProject).should_receive("get_files").and_return(["foo.spec"]) flexmock(GithubProject).should_receive("get_files").and_return( - ["foo.spec", ".packit.yaml"] + ["foo.spec", ".packit.yaml"], ) flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/the-namespace/the-repo" + "https://github.com/the-namespace/the-repo", ) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(koji_build).should_receive("get_koji_targets").and_return( - {"rawhide", "f34"} + {"rawhide", "f34"}, ) flexmock(StatusReporterGithubChecks).should_receive("set_status").with_args( state=BaseCommitStatus.error, @@ -433,7 +436,7 @@ def test_check_rerun_pr_koji_build_handler_old_job_name( processing_results = SteveJobs().process_message(check_rerun_event_koji_build) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) assert event_dict["build_targets_override"] == ["f34"] @@ -467,13 +470,14 @@ def test_check_rerun_pr_koji_build_handler_old_job_name( "fedora-all", ], }, - ] + ], ] ), indirect=True, ) def test_check_rerun_push_testing_farm_handler( - mock_push_functionality, check_rerun_event_testing_farm + mock_push_functionality, + check_rerun_event_testing_farm, ): run = flexmock(test_run_group=None) build = flexmock(status=BuildStatus.success, group_of_targets=flexmock(runs=[run])) @@ -483,25 +487,25 @@ def test_check_rerun_push_testing_farm_handler( target="fedora-rawhide-x86_64", ) flexmock(TFTTestRunGroupModel).should_receive("create").with_args([run]).and_return( - flexmock(grouped_targets=[test]) + flexmock(grouped_targets=[test]), ) flexmock(TFTTestRunTargetModel).should_receive("create").and_return(test) flexmock(TestingFarmJobHelper).should_receive("run_testing_farm").once().and_return( - TaskResults(success=True, details={}) + TaskResults(success=True, details={}), ) flexmock(GithubProject).should_receive("get_files").and_return(["foo.spec"]) flexmock(GithubProject).should_receive("get_files").and_return( - ["foo.spec", ".packit.yaml"] + ["foo.spec", ".packit.yaml"], ) flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/the-namespace/the-repo" + "https://github.com/the-namespace/the-repo", ) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(TestingFarmJobHelper).should_receive("get_latest_copr_build").and_return( - flexmock(status=BuildStatus.success, group_of_targets=flexmock(runs=[run])) + flexmock(status=BuildStatus.success, group_of_targets=flexmock(runs=[run])), ) flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( - {"fedora-rawhide-x86_64", "fedora-34-x86_64"} + {"fedora-rawhide-x86_64", "fedora-34-x86_64"}, ) flexmock(StatusReporterGithubChecks).should_receive("set_status").with_args( state=BaseCommitStatus.pending, @@ -516,7 +520,7 @@ def test_check_rerun_push_testing_farm_handler( processing_results = SteveJobs().process_message(check_rerun_event_testing_farm) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert event_dict["tests_targets_override"] == ["fedora-rawhide-x86_64"] assert json.dumps(event_dict) @@ -539,28 +543,29 @@ def test_check_rerun_push_testing_farm_handler( "targets": "fedora-all", "scratch": "true", "branch": "main", - } - ] + }, + ], ] ), indirect=True, ) def test_check_rerun_push_koji_build_handler( - mock_push_functionality, check_rerun_event_koji_build_push + mock_push_functionality, + check_rerun_event_koji_build_push, ): flexmock(KojiBuildJobHelper).should_receive("run_koji_build").and_return( - TaskResults(success=True, details={}) + TaskResults(success=True, details={}), ) flexmock(GithubProject).should_receive("get_files").and_return(["foo.spec"]) flexmock(GithubProject).should_receive("get_files").and_return( - ["foo.spec", ".packit.yaml"] + ["foo.spec", ".packit.yaml"], ) flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/the-namespace/the-repo" + "https://github.com/the-namespace/the-repo", ) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(koji_build).should_receive("get_koji_targets").and_return( - {"rawhide", "f34"} + {"rawhide", "f34"}, ) flexmock(StatusReporterGithubChecks).should_receive("set_status").with_args( state=BaseCommitStatus.pending, @@ -575,7 +580,7 @@ def test_check_rerun_push_koji_build_handler( processing_results = SteveJobs().process_message(check_rerun_event_koji_build_push) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert event_dict["build_targets_override"] == ["f34"] assert json.dumps(event_dict) @@ -597,28 +602,29 @@ def test_check_rerun_push_koji_build_handler( "trigger": "release", "job": "upstream_koji_build", "metadata": {"targets": "fedora-all", "scratch": "true"}, - } - ] + }, + ], ] ), indirect=True, ) def test_check_rerun_release_koji_build_handler( - mock_release_functionality, check_rerun_event_koji_build + mock_release_functionality, + check_rerun_event_koji_build, ): flexmock(KojiBuildJobHelper).should_receive("run_koji_build").and_return( - TaskResults(success=True, details={}) + TaskResults(success=True, details={}), ) flexmock(GithubProject).should_receive("get_files").and_return(["foo.spec"]) flexmock(GithubProject).should_receive("get_files").and_return( - ["foo.spec", ".packit.yaml"] + ["foo.spec", ".packit.yaml"], ) flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/the-namespace/the-repo" + "https://github.com/the-namespace/the-repo", ) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(koji_build).should_receive("get_koji_targets").and_return( - {"rawhide", "f34"} + {"rawhide", "f34"}, ) flexmock(StatusReporterGithubChecks).should_receive("set_status").with_args( state=BaseCommitStatus.pending, @@ -633,7 +639,7 @@ def test_check_rerun_release_koji_build_handler( processing_results = SteveJobs().process_message(check_rerun_event_koji_build) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert event_dict["build_targets_override"] == ["f34"] assert json.dumps(event_dict) @@ -655,31 +661,32 @@ def test_check_rerun_release_koji_build_handler( "trigger": "release", "job": "propose_downstream", "metadata": {"targets": "fedora-all"}, - } - ] + }, + ], ] ), indirect=True, ) def test_check_rerun_release_propose_downstream_handler( - mock_release_functionality, check_rerun_event_propose_downstream + mock_release_functionality, + check_rerun_event_propose_downstream, ): flexmock(ProposeDownstreamHandler).should_receive("run_job").and_return( - TaskResults(success=True, details={}) + TaskResults(success=True, details={}), ) flexmock(GithubProject).should_receive("get_files").and_return(["foo.spec"]) flexmock(GithubProject).should_receive("get_files").and_return( - ["foo.spec", ".packit.yaml"] + ["foo.spec", ".packit.yaml"], ) flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/the-namespace/the-repo" + "https://github.com/the-namespace/the-repo", ) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( - {"fedora-rawhide-x86_64", "fedora-34-x86_64"} + {"fedora-rawhide-x86_64", "fedora-34-x86_64"}, ) flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_to_all" + "report_status_to_all", ).with_args( description=TASK_ACCEPTED, state=BaseCommitStatus.pending, @@ -692,10 +699,10 @@ def test_check_rerun_release_propose_downstream_handler( flexmock(Pushgateway).should_receive("push").times(2).and_return() processing_results = SteveJobs().process_message( - check_rerun_event_propose_downstream + check_rerun_event_propose_downstream, ) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert event_dict["branches_override"] == ["f34"] assert json.dumps(event_dict) diff --git a/tests/integration/test_database.py b/tests/integration/test_database.py index 692d3bece..a4f85f132 100644 --- a/tests/integration/test_database.py +++ b/tests/integration/test_database.py @@ -16,7 +16,7 @@ def test_cleanup_old_srpm_build_logs(): flexmock(srpm_build).should_receive("set_logs").with_args(None).once() flexmock(srpm_build).should_receive("set_url").with_args(None).once() flexmock(SRPMBuildModel).should_receive("get_older_than").and_return( - [srpm_build] + [srpm_build], ).once() database.discard_old_srpm_build_logs() @@ -25,7 +25,7 @@ def test_discard_old_package_configs(): event_model = flexmock(id=1) flexmock(event_model).should_receive("set_packages_config").with_args(None).once() flexmock(ProjectEventModel).should_receive( - "get_older_than_with_packages_config" + "get_older_than_with_packages_config", ).and_return([event_model]).once() database.discard_old_package_configs() diff --git a/tests/integration/test_dg_commit.py b/tests/integration/test_dg_commit.py index d3ad053be..046545f79 100644 --- a/tests/integration/test_dg_commit.py +++ b/tests/integration/test_dg_commit.py @@ -63,17 +63,22 @@ def test_sync_from_downstream(): default_branch="main", ) pagure_project.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["buildah.spec"]) pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["buildah.spec", ".packit.yaml"]) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.branch_push, event_id=9, commit_sha="abcd" + type=ProjectEventModelType.branch_push, + event_id=9, + commit_sha="abcd", ).and_return(flexmock()) flexmock(GitBranchModel).should_receive("get_or_create").with_args( branch_name="main", @@ -85,7 +90,7 @@ def test_sync_from_downstream(): id=9, job_config_trigger_type=JobConfigTriggerType.commit, project_event_model_type=ProjectEventModelType.branch_push, - ) + ), ) flexmock(ServiceConfig).should_receive("get_service_config").and_return( @@ -98,13 +103,13 @@ def test_sync_from_downstream(): branch="aaa", dg_branch="main", dg_repo_name="buildah", - ) + ), ], command_handler_work_dir=SANDCASTLE_WORK_DIR, repository_cache="/tmp/repository-cache", add_repositories_to_repository_cache=False, deployment=Deployment.prod, - ) + ), ) flexmock(LocalProjectBuilder, _refresh_the_state=lambda *args: None) @@ -112,12 +117,14 @@ def test_sync_from_downstream(): flexmock(group).should_receive("apply_async").once() flexmock(Pushgateway).should_receive("push").times(2).and_return() flexmock(PackitAPI).should_receive("sync_from_downstream").with_args( - dist_git_branch="main", upstream_branch="aaa", sync_only_specfile=True + dist_git_branch="main", + upstream_branch="aaa", + sync_only_specfile=True, ) processing_results = SteveJobs().process_message(distgit_commit_event()) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) results = run_sync_from_downstream_handler( @@ -141,17 +148,22 @@ def test_do_not_sync_from_downstream_on_a_different_branch(): default_branch="main", ) pagure_project.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["buildah.spec"]) pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["buildah.spec", ".packit.yaml"]) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.branch_push, event_id=9, commit_sha="abcd" + type=ProjectEventModelType.branch_push, + event_id=9, + commit_sha="abcd", ).and_return(flexmock()) flexmock(GitBranchModel).should_receive("get_or_create").with_args( branch_name="main", @@ -163,7 +175,7 @@ def test_do_not_sync_from_downstream_on_a_different_branch(): id=9, job_config_trigger_type=JobConfigTriggerType.commit, project_event_model_type=ProjectEventModelType.branch_push, - ) + ), ) flexmock(ServiceConfig).should_receive("get_service_config").and_return( @@ -176,13 +188,13 @@ def test_do_not_sync_from_downstream_on_a_different_branch(): branch="aaa", dg_branch="different_branch", dg_repo_name="buildah", - ) + ), ], command_handler_work_dir=SANDCASTLE_WORK_DIR, repository_cache="/tmp/repository-cache", add_repositories_to_repository_cache=False, deployment=Deployment.prod, - ) + ), ) flexmock(Pushgateway).should_receive("push").times(1).and_return() @@ -212,13 +224,16 @@ def test_downstream_koji_build(sidetag_group): default_branch="main", ) pagure_project.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["buildah.spec"]) pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["buildah.spec", ".packit.yaml"]) db_project_object = flexmock( @@ -233,7 +248,9 @@ def test_downstream_koji_build(sidetag_group): .mock() ) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.branch_push, event_id=9, commit_sha="abcd" + type=ProjectEventModelType.branch_push, + event_id=9, + commit_sha="abcd", ).and_return(flexmock()) flexmock(GitBranchModel).should_receive("get_or_create").with_args( branch_name="main", @@ -242,7 +259,7 @@ def test_downstream_koji_build(sidetag_group): project_url="https://src.fedoraproject.org/rpms/buildah", ).and_return(db_project_object) flexmock(ProjectEventModel).should_receive("get_or_create").and_return( - db_project_event + db_project_event, ) flexmock(PipelineModel).should_receive("create") koji_build = flexmock( @@ -257,7 +274,7 @@ def test_downstream_koji_build(sidetag_group): flexmock(KojiBuildTargetModel).should_receive("create").and_return(koji_build) flexmock(KojiBuildGroupModel).should_receive("create").and_return( - flexmock(grouped_targets=[koji_build]) + flexmock(grouped_targets=[koji_build]), ) if sidetag_group: @@ -265,15 +282,15 @@ def test_downstream_koji_build(sidetag_group): sidetag = flexmock(koji_name=None) flexmock(SidetagModel).should_receive("get_or_create_for_updating").and_return( - sidetag + sidetag, ) flexmock(SidetagGroupModel).should_receive("get_or_create").and_return( - flexmock() + flexmock(), ) flexmock(KojiHelper).should_receive("get_tag_info").and_return(None) flexmock(PackitAPI).should_receive("init_kerberos_ticket").and_return(None) flexmock(KojiHelper).should_receive("create_sidetag").and_return( - {"name": koji_target} + {"name": koji_target}, ) flexmock(LocalProjectBuilder, _refresh_the_state=lambda *args: None) @@ -287,11 +304,11 @@ def test_downstream_koji_build(sidetag_group): koji_target=koji_target if sidetag_group else None, ).and_return("") flexmock(DownstreamKojiBuildHandler).should_receive( - "is_already_triggered" + "is_already_triggered", ).and_return(False) processing_results = SteveJobs().process_message(distgit_commit_event()) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) results = run_downstream_koji_build( @@ -318,13 +335,16 @@ def test_downstream_koji_build_failure_no_issue(): ) flexmock(PagureProject).should_receive("get_pr").never() pagure_project_mock.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["buildah.spec"]) pagure_project_mock.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project_mock.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["buildah.spec", ".packit.yaml"]) db_project_object = flexmock( @@ -339,7 +359,9 @@ def test_downstream_koji_build_failure_no_issue(): .mock() ) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.branch_push, event_id=9, commit_sha="abcd" + type=ProjectEventModelType.branch_push, + event_id=9, + commit_sha="abcd", ).and_return(flexmock()) flexmock(GitBranchModel).should_receive("get_or_create").with_args( branch_name="main", @@ -348,7 +370,7 @@ def test_downstream_koji_build_failure_no_issue(): project_url="https://src.fedoraproject.org/rpms/buildah", ).and_return(db_project_object) flexmock(ProjectEventModel).should_receive("get_or_create").and_return( - db_project_event + db_project_event, ) flexmock(PipelineModel).should_receive("create") koji_build = flexmock( @@ -363,7 +385,7 @@ def test_downstream_koji_build_failure_no_issue(): flexmock(KojiBuildTargetModel).should_receive("create").and_return(koji_build) flexmock(KojiBuildGroupModel).should_receive("create").and_return( - flexmock(id=1, grouped_targets=[koji_build]) + flexmock(id=1, grouped_targets=[koji_build]), ) flexmock(Pushgateway).should_receive("push").times(1).and_return() @@ -377,7 +399,7 @@ def test_downstream_koji_build_failure_no_issue(): koji_target=None, ).and_raise(PackitException, "Some error") flexmock(DownstreamKojiBuildHandler).should_receive( - "is_already_triggered" + "is_already_triggered", ).and_return(False) pagure_project_mock.should_receive("get_issue_list").times(0) @@ -385,7 +407,7 @@ def test_downstream_koji_build_failure_no_issue(): processing_results = SteveJobs().process_message(distgit_commit_event()) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) with pytest.raises(PackitException): @@ -412,13 +434,16 @@ def test_downstream_koji_build_failure_issue_created(): ) flexmock(PagureProject).should_receive("get_pr").never() pagure_project_mock.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["buildah.spec"]) pagure_project_mock.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project_mock.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["buildah.spec", ".packit.yaml"]) db_project_object = flexmock( @@ -433,7 +458,9 @@ def test_downstream_koji_build_failure_issue_created(): .mock() ) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.branch_push, event_id=9, commit_sha="abcd" + type=ProjectEventModelType.branch_push, + event_id=9, + commit_sha="abcd", ).and_return(flexmock()) flexmock(GitBranchModel).should_receive("get_or_create").with_args( branch_name="main", @@ -442,7 +469,7 @@ def test_downstream_koji_build_failure_issue_created(): project_url="https://src.fedoraproject.org/rpms/buildah", ).and_return(db_project_object) flexmock(ProjectEventModel).should_receive("get_or_create").and_return( - db_project_event + db_project_event, ) flexmock(PipelineModel).should_receive("create") koji_build = flexmock( @@ -457,7 +484,7 @@ def test_downstream_koji_build_failure_issue_created(): flexmock(KojiBuildTargetModel).should_receive("create").and_return(koji_build) flexmock(KojiBuildGroupModel).should_receive("create").and_return( - flexmock(grouped_targets=[koji_build]) + flexmock(grouped_targets=[koji_build]), ) flexmock(Pushgateway).should_receive("push").times(2).and_return() flexmock(LocalProjectBuilder, _refresh_the_state=lambda *args: None) @@ -470,18 +497,18 @@ def test_downstream_koji_build_failure_issue_created(): koji_target=None, ).and_raise(PackitException, "Some error") flexmock(DownstreamKojiBuildHandler).should_receive( - "is_already_triggered" + "is_already_triggered", ).and_return(False) issue_project_mock = flexmock(GithubProject) issue_project_mock.should_receive("get_issue_list").and_return([]).once() issue_project_mock.should_receive("create_issue").and_return( - flexmock(id=3, url="https://github.com/namespace/project/issues/3") + flexmock(id=3, url="https://github.com/namespace/project/issues/3"), ).once() processing_results = SteveJobs().process_message(distgit_commit_event()) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) DownstreamKojiBuildHandler( @@ -512,13 +539,16 @@ def test_downstream_koji_build_failure_issue_comment(): ) flexmock(PagureProject).should_receive("get_pr").never() pagure_project_mock.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["buildah.spec"]) pagure_project_mock.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project_mock.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["buildah.spec", ".packit.yaml"]) db_project_object = flexmock( @@ -533,7 +563,9 @@ def test_downstream_koji_build_failure_issue_comment(): .mock() ) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.branch_push, event_id=9, commit_sha="abcd" + type=ProjectEventModelType.branch_push, + event_id=9, + commit_sha="abcd", ).and_return(flexmock()) flexmock(GitBranchModel).should_receive("get_or_create").with_args( branch_name="main", @@ -542,7 +574,7 @@ def test_downstream_koji_build_failure_issue_comment(): project_url="https://src.fedoraproject.org/rpms/buildah", ).and_return(db_project_object) flexmock(ProjectEventModel).should_receive("get_or_create").and_return( - db_project_event + db_project_event, ) flexmock(PipelineModel).should_receive("create") koji_build = flexmock( @@ -557,7 +589,7 @@ def test_downstream_koji_build_failure_issue_comment(): flexmock(KojiBuildTargetModel).should_receive("create").and_return(koji_build) flexmock(KojiBuildGroupModel).should_receive("create").and_return( - flexmock(grouped_targets=[koji_build]) + flexmock(grouped_targets=[koji_build]), ) flexmock(Pushgateway).should_receive("push").times(2).and_return() @@ -571,7 +603,7 @@ def test_downstream_koji_build_failure_issue_comment(): koji_target=None, ).and_raise(PackitException, "Some error") flexmock(DownstreamKojiBuildHandler).should_receive( - "is_already_triggered" + "is_already_triggered", ).and_return(False) issue_project_mock = flexmock(GithubProject) @@ -584,14 +616,14 @@ def test_downstream_koji_build_failure_issue_comment(): ) .should_receive("comment") .once() - .mock() - ] + .mock(), + ], ).once() issue_project_mock.should_receive("create_issue").times(0) processing_results = SteveJobs().process_message(distgit_commit_event()) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) DownstreamKojiBuildHandler( @@ -615,10 +647,12 @@ def test_downstream_koji_build_no_config(): ) flexmock(PagureProject).should_receive("get_pr").never() pagure_project.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["buildah.spec"]) pagure_project.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["buildah.spec", "Makefile"]) flexmock(PackageConfigGetter).should_call("get_package_config_from_repo").once() @@ -634,7 +668,7 @@ def test_downstream_koji_build_no_config(): command_handler_work_dir=SANDCASTLE_WORK_DIR, repository_cache="/tmp/repository-cache", add_repositories_to_repository_cache=False, - ) + ), ) flexmock(Pushgateway).should_receive("push").times(1).and_return() @@ -694,13 +728,16 @@ def test_downstream_koji_build_where_multiple_branches_defined(jobs_config): default_branch="main", ) pagure_project.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["buildah.spec"]) pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["buildah.spec", ".packit.yaml"]) db_project_object = flexmock( @@ -715,7 +752,9 @@ def test_downstream_koji_build_where_multiple_branches_defined(jobs_config): .mock() ) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.branch_push, event_id=9, commit_sha="abcd" + type=ProjectEventModelType.branch_push, + event_id=9, + commit_sha="abcd", ).and_return(flexmock()) flexmock(GitBranchModel).should_receive("get_or_create").with_args( branch_name="main", @@ -724,7 +763,7 @@ def test_downstream_koji_build_where_multiple_branches_defined(jobs_config): project_url="https://src.fedoraproject.org/rpms/buildah", ).and_return(db_project_object) flexmock(ProjectEventModel).should_receive("get_or_create").and_return( - db_project_event + db_project_event, ) flexmock(PipelineModel).should_receive("create") koji_build = flexmock( @@ -739,7 +778,7 @@ def test_downstream_koji_build_where_multiple_branches_defined(jobs_config): flexmock(KojiBuildTargetModel).should_receive("create").and_return(koji_build) flexmock(KojiBuildGroupModel).should_receive("create").and_return( - flexmock(grouped_targets=[koji_build]) + flexmock(grouped_targets=[koji_build]), ) flexmock(LocalProjectBuilder, _refresh_the_state=lambda *args: None) @@ -760,13 +799,13 @@ def test_downstream_koji_build_where_multiple_branches_defined(jobs_config): koji_target=None, ).once().and_return("") flexmock(DownstreamKojiBuildHandler).should_receive( - "is_already_triggered" + "is_already_triggered", ).and_return(False) processing_results = SteveJobs().process_message(distgit_commit_event()) assert len(processing_results) == 1 event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) results = run_downstream_koji_build( @@ -822,17 +861,22 @@ def test_do_not_run_downstream_koji_build_for_a_different_branch(jobs_config): default_branch="main", ) pagure_project.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["buildah.spec"]) pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["buildah.spec", ".packit.yaml"]) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.branch_push, event_id=9, commit_sha="abcd" + type=ProjectEventModelType.branch_push, + event_id=9, + commit_sha="abcd", ).and_return(flexmock()) flexmock(GitBranchModel).should_receive("get_or_create").with_args( branch_name="main", @@ -844,7 +888,7 @@ def test_do_not_run_downstream_koji_build_for_a_different_branch(jobs_config): id=9, job_config_trigger_type=JobConfigTriggerType.commit, project_event_model_type=ProjectEventModelType.branch_push, - ) + ), ) flexmock(Pushgateway).should_receive("push").times(1).and_return() @@ -864,7 +908,10 @@ def test_do_not_run_downstream_koji_build_for_a_different_branch(jobs_config): ), ) def test_precheck_koji_build_push( - distgit_push_event, push_username, allowed_committers, should_pass + distgit_push_event, + push_username, + allowed_committers, + should_pass, ): distgit_push_event.committer = push_username distgit_push_event = flexmock(distgit_push_event, _pr_id=None) @@ -877,7 +924,7 @@ def test_precheck_koji_build_push( ).and_return( flexmock( id=342, - ) + ), ) flexmock(GitBranchModel).should_receive("get_or_create").with_args( branch_name="f36", @@ -889,7 +936,7 @@ def test_precheck_koji_build_push( id=13, job_config_trigger_type=JobConfigTriggerType.commit, project_event_model_type=ProjectEventModelType.branch_push, - ) + ), ) # flexmock(ProjectEventModel).should_receive("get_or_create").with_args( @@ -904,7 +951,7 @@ def test_precheck_koji_build_push( "package": CommonPackageConfig( dist_git_branches=["f36"], allowed_committers=allowed_committers, - ) + ), }, ), ] @@ -943,7 +990,7 @@ def test_precheck_koji_build_push_pr( ).and_return( flexmock( id=342, - ) + ), ) flexmock(GitBranchModel).should_receive("get_or_create").with_args( branch_name="f36", @@ -955,7 +1002,7 @@ def test_precheck_koji_build_push_pr( id=13, job_config_trigger_type=JobConfigTriggerType.commit, project_event_model_type=ProjectEventModelType.branch_push, - ) + ), ) # flexmock(ProjectEventModel).should_receive("get_or_create").with_args( @@ -970,7 +1017,7 @@ def test_precheck_koji_build_push_pr( "package": CommonPackageConfig( dist_git_branches=["f36"], allowed_pr_authors=allowed_pr_authors, - ) + ), }, ), ] @@ -981,10 +1028,12 @@ def test_precheck_koji_build_push_pr( head_commit="ad0c308af91da45cf40b253cd82f07f63ea9cbbf", status=PRStatus.open, target_branch="f36", - ) + ), ) flexmock(PagureProject).should_receive("get_pr_files_diff").with_args( - 5, retries=int, wait_seconds=int + 5, + retries=int, + wait_seconds=int, ).and_return({"package.spec": []}) package_config = ( PackageConfig( diff --git a/tests/integration/test_github_fas_verification.py b/tests/integration/test_github_fas_verification.py index 896a88569..c75566cf9 100644 --- a/tests/integration/test_github_fas_verification.py +++ b/tests/integration/test_github_fas_verification.py @@ -25,7 +25,9 @@ def issue_comment_event(): return json.loads( - (DATA_DIR / "webhooks" / "github" / "issue_comment_verify_fas.json").read_text() + ( + DATA_DIR / "webhooks" / "github" / "issue_comment_verify_fas.json" + ).read_text(), ) @@ -40,7 +42,7 @@ def test_verification_successful(): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_releases").and_return([]) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(None) issue_comment = flexmock() @@ -56,16 +58,16 @@ def test_verification_successful(): processing_results = SteveJobs().process_message(issue_comment_event()) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) flexmock(Allowlist).should_receive("is_namespace_or_parent_approved").and_return( - False + False, ) flexmock(Allowlist).should_receive("is_denied").and_return(False) flexmock(Allowlist).should_receive( - "is_github_username_from_fas_account_matching" + "is_github_username_from_fas_account_matching", ).with_args(fas_account="my-fas-account", sender_login="phracek").and_return(True) flexmock(AllowlistModel).should_receive("add_namespace").with_args( "github.com/example-user", @@ -73,7 +75,7 @@ def test_verification_successful(): "my-fas-account", ).once() flexmock(GithubInstallationModel).should_receive("get_by_account_login").with_args( - "example-user" + "example-user", ).and_return(flexmock(sender_login="phracek")) msg = ( @@ -102,7 +104,7 @@ def test_verification_not_successful(): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_releases").and_return([]) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(None) issue_comment = flexmock() @@ -118,20 +120,20 @@ def test_verification_not_successful(): processing_results = SteveJobs().process_message(issue_comment_event()) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) flexmock(Allowlist).should_receive("is_namespace_or_parent_approved").and_return( - False + False, ) flexmock(Allowlist).should_receive("is_denied").and_return(False) flexmock(Allowlist).should_receive( - "is_github_username_from_fas_account_matching" + "is_github_username_from_fas_account_matching", ).with_args(fas_account="my-fas-account", sender_login="phracek").and_return(False) flexmock(AllowlistModel).should_receive("add_namespace").never() flexmock(GithubInstallationModel).should_receive("get_by_account_login").with_args( - "example-user" + "example-user", ).and_return(flexmock(sender_login="phracek")) msg = ( @@ -172,7 +174,7 @@ def test_verification_incorrect_format(comment): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_releases").and_return([]) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(None) issue_comment = flexmock() @@ -188,16 +190,16 @@ def test_verification_incorrect_format(comment): processing_results = SteveJobs().process_message(event_issue_comment) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) flexmock(Allowlist).should_receive( - "is_github_username_from_fas_account_matching" + "is_github_username_from_fas_account_matching", ).never() flexmock(AllowlistModel).should_receive("add_namespace").never() flexmock(GithubInstallationModel).should_receive("get_by_account_login").with_args( - "example-user" + "example-user", ).and_return(flexmock(sender_login="phracek")) msg = ( @@ -226,7 +228,7 @@ def test_verification_already_approved(): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_releases").and_return([]) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(None) issue_comment = flexmock() @@ -242,16 +244,16 @@ def test_verification_already_approved(): processing_results = SteveJobs().process_message(issue_comment_event()) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) flexmock(Allowlist).should_receive("is_namespace_or_parent_approved").and_return( - True + True, ) flexmock(AllowlistModel).should_receive("add_namespace").never() flexmock(GithubInstallationModel).should_receive("get_by_account_login").with_args( - "example-user" + "example-user", ).and_return(flexmock(sender_login="phracek")) msg = "Namespace `github.com/example-user` was already approved." @@ -277,7 +279,7 @@ def test_verification_wrong_repository(): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_releases").and_return([]) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(None) issue = flexmock( @@ -289,7 +291,7 @@ def test_verification_wrong_repository(): processing_results = SteveJobs().process_message(issue_comment_event()) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -305,7 +307,7 @@ def test_verification_wrong_issue(): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_releases").and_return([]) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(None) issue = flexmock( @@ -317,7 +319,7 @@ def test_verification_wrong_issue(): processing_results = SteveJobs().process_message(issue_comment_event()) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -333,7 +335,7 @@ def test_verification_not_original_triggerer(): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_releases").and_return([]) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(None) issue_comment = flexmock() @@ -349,16 +351,16 @@ def test_verification_not_original_triggerer(): processing_results = SteveJobs().process_message(issue_comment_event()) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) flexmock(Allowlist).should_receive("is_namespace_or_parent_approved").and_return( - True + True, ) flexmock(AllowlistModel).should_receive("add_namespace").never() flexmock(GithubInstallationModel).should_receive("get_by_account_login").with_args( - "example-user" + "example-user", ).and_return(flexmock(sender_login="somebody-else")) msg = ( diff --git a/tests/integration/test_handler.py b/tests/integration/test_handler.py index db45b150f..b3156aa77 100644 --- a/tests/integration/test_handler.py +++ b/tests/integration/test_handler.py @@ -44,7 +44,9 @@ def trick_p_s_with_k8s(): def test_handler_cleanup(tmp_path, trick_p_s_with_k8s): class TestJobHandler( - JobHandler, ConfigFromEventMixin, PackitAPIWithDownstreamMixin + JobHandler, + ConfigFromEventMixin, + PackitAPIWithDownstreamMixin, ): pass @@ -125,7 +127,7 @@ def test_precheck(github_pr_event): event = github_pr_event.get_dict() flexmock(CoprBuildJobHelper).should_receive( - "is_custom_copr_project_defined" + "is_custom_copr_project_defined", ).and_return(False).once() assert CoprBuildHandler.pre_check(package_config, job_config, event) @@ -182,7 +184,7 @@ def test_precheck_gitlab(gitlab_mr_event): event = gitlab_mr_event.get_dict() flexmock(CoprBuildJobHelper).should_receive( - "is_custom_copr_project_defined" + "is_custom_copr_project_defined", ).and_return(False).once() assert CoprBuildHandler.pre_check(package_config, job_config, event) @@ -206,7 +208,7 @@ def test_precheck_push(github_push_event): commit_sha="04885ff850b0fa0e206cd09db73565703d48f99b", ).and_return(db_project_event) flexmock(GitBranchModel).should_receive("get_or_create").and_return( - db_project_object + db_project_object, ) jc = JobConfig( type=JobType.copr_build, @@ -216,12 +218,13 @@ def test_precheck_push(github_push_event): branch="build-branch", owner="@foo", project="bar", - ) + ), }, ) package_config = PackageConfig( - jobs=[jc], packages={"package": CommonPackageConfig()} + jobs=[jc], + packages={"package": CommonPackageConfig()}, ) event = github_push_event.get_dict() api = flexmock( @@ -230,11 +233,11 @@ def test_precheck_push(github_push_event): config={"username": "nobody"}, project_proxy=flexmock( get=lambda owner, project: { - "packit_forge_projects_allowed": "github.com/packit-service/hello-world" - } + "packit_forge_projects_allowed": "github.com/packit-service/hello-world", + }, ), - ) - ) + ), + ), ) flexmock(CoprBuildJobHelper).should_receive("api").and_return(api) @@ -261,7 +264,7 @@ def test_precheck_push_to_a_different_branch(github_push_event): commit_sha="04885ff850b0fa0e206cd09db73565703d48f99b", ).and_return(db_project_event) flexmock(GitBranchModel).should_receive("get_or_create").and_return( - db_project_object + db_project_object, ) package_config = PackageConfig( @@ -272,7 +275,7 @@ def test_precheck_push_to_a_different_branch(github_push_event): packages={ "package": CommonPackageConfig( branch="bad-branch", - ) + ), }, ), ], @@ -284,7 +287,7 @@ def test_precheck_push_to_a_different_branch(github_push_event): packages={ "package": CommonPackageConfig( branch="bad-branch", - ) + ), }, ) event = github_push_event.get_dict() @@ -293,7 +296,7 @@ def test_precheck_push_to_a_different_branch(github_push_event): def test_precheck_push_actor_check(github_push_event): flexmock(GitBranchModel).should_receive("get_or_create").and_return( - flexmock(id=1, job_config_trigger_type=JobConfigTriggerType.commit) + flexmock(id=1, job_config_trigger_type=JobConfigTriggerType.commit), ) package_config = PackageConfig( @@ -362,7 +365,7 @@ def test_precheck_koji_build_non_scratch(github_pr_event): "package": CommonPackageConfig( _targets=["bright-future"], scratch=False, - ) + ), }, ), ], @@ -375,7 +378,7 @@ def test_precheck_koji_build_non_scratch(github_pr_event): "package": CommonPackageConfig( _targets=["bright-future"], scratch=False, - ) + ), }, ) event = github_pr_event.get_dict() diff --git a/tests/integration/test_installation.py b/tests/integration/test_installation.py index 406dbda32..91ad1ae4f 100644 --- a/tests/integration/test_installation.py +++ b/tests/integration/test_installation.py @@ -22,7 +22,7 @@ def installation_event(): return json.loads( - (DATA_DIR / "webhooks" / "github" / "installation_created.json").read_text() + (DATA_DIR / "webhooks" / "github" / "installation_created.json").read_text(), ) @@ -31,14 +31,14 @@ def test_installation(): config.command_handler_work_dir = SANDCASTLE_WORK_DIR flexmock(ServiceConfig).should_receive("get_service_config").and_return(config) flexmock(GithubInstallationModel).should_receive( - "get_by_account_login" + "get_by_account_login", ).and_return() flexmock(GithubInstallationModel).should_receive("create_or_update").once() flexmock(AllowlistModel).should_receive("get_namespace").with_args( - "github.com/packit-service" + "github.com/packit-service", ).and_return(None) flexmock(Allowlist).should_receive( - "is_github_username_from_fas_account_matching" + "is_github_username_from_fas_account_matching", ).with_args(fas_account="jpopelka", sender_login="jpopelka").and_return(False) flexmock(PackageConfigGetter).should_receive("create_issue_if_needed").once() flexmock(AllowlistModel).should_receive("add_namespace") @@ -47,7 +47,7 @@ def test_installation(): flexmock(Pushgateway).should_receive("push").times(2).and_return() processing_results = SteveJobs().process_message(installation_event()) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -65,14 +65,14 @@ def test_reinstallation_already_approved_namespace(): config.command_handler_work_dir = SANDCASTLE_WORK_DIR flexmock(ServiceConfig).should_receive("get_service_config").and_return(config) flexmock(GithubInstallationModel).should_receive("get_by_account_login").and_return( - flexmock(sender_login="jpopelka") + flexmock(sender_login="jpopelka"), ) flexmock(GithubInstallationModel).should_receive("create_or_update").once() flexmock(AllowlistModel).should_receive("get_namespace").with_args( - "github.com/packit-service" + "github.com/packit-service", ).and_return(flexmock()) flexmock(Allowlist).should_receive("is_namespace_or_parent_approved").with_args( - "github.com/packit-service" + "github.com/packit-service", ).and_return(True) flexmock(PackageConfigGetter).should_receive("create_issue_if_needed").never() @@ -80,7 +80,7 @@ def test_reinstallation_already_approved_namespace(): flexmock(Pushgateway).should_receive("push").times(2).and_return() processing_results = SteveJobs().process_message(installation_event()) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -98,17 +98,17 @@ def test_reinstallation_denied_namespace(): config.command_handler_work_dir = SANDCASTLE_WORK_DIR flexmock(ServiceConfig).should_receive("get_service_config").and_return(config) flexmock(GithubInstallationModel).should_receive("get_by_account_login").and_return( - flexmock(sender_login="jpopelka") + flexmock(sender_login="jpopelka"), ) flexmock(GithubInstallationModel).should_receive("create_or_update").once() flexmock(AllowlistModel).should_receive("get_namespace").with_args( - "github.com/packit-service" + "github.com/packit-service", ).and_return(flexmock()) flexmock(Allowlist).should_receive("is_namespace_or_parent_approved").with_args( - "github.com/packit-service" + "github.com/packit-service", ).and_return(False) flexmock(Allowlist).should_receive("is_denied").with_args( - "github.com/packit-service" + "github.com/packit-service", ).and_return(True) flexmock(PackageConfigGetter).should_receive("create_issue_if_needed").never() @@ -116,7 +116,7 @@ def test_reinstallation_denied_namespace(): flexmock(Pushgateway).should_receive("push").times(2).and_return() processing_results = SteveJobs().process_message(installation_event()) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -130,28 +130,29 @@ def test_reinstallation_denied_namespace(): @pytest.mark.parametrize( - "previous_sender_login, create_issue", [("jpopelka", False), ("flachman", True)] + "previous_sender_login, create_issue", + [("jpopelka", False), ("flachman", True)], ) def test_reinstallation_not_approved_namespace(previous_sender_login, create_issue): config = ServiceConfig() config.command_handler_work_dir = SANDCASTLE_WORK_DIR flexmock(ServiceConfig).should_receive("get_service_config").and_return(config) flexmock(GithubInstallationModel).should_receive("get_by_account_login").and_return( - flexmock(sender_login=previous_sender_login) + flexmock(sender_login=previous_sender_login), ) flexmock(GithubInstallationModel).should_receive("create_or_update").once() flexmock(AllowlistModel).should_receive("get_namespace").with_args( - "github.com/packit-service" + "github.com/packit-service", ).and_return(flexmock()) flexmock(Allowlist).should_receive("is_namespace_or_parent_approved").with_args( - "github.com/packit-service" + "github.com/packit-service", ).and_return(False) flexmock(Allowlist).should_receive("is_denied").with_args( - "github.com/packit-service" + "github.com/packit-service", ).and_return(False) if create_issue: flexmock(Allowlist).should_receive( - "is_github_username_from_fas_account_matching" + "is_github_username_from_fas_account_matching", ).with_args(fas_account="jpopelka", sender_login="jpopelka").and_return(False) flexmock(PackageConfigGetter).should_receive("create_issue_if_needed").once() flexmock(AllowlistModel).should_receive("add_namespace").once() @@ -162,7 +163,7 @@ def test_reinstallation_not_approved_namespace(previous_sender_login, create_iss flexmock(Pushgateway).should_receive("push").times(2).and_return() processing_results = SteveJobs().process_message(installation_event()) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) diff --git a/tests/integration/test_issue_comment.py b/tests/integration/test_issue_comment.py index 24af676a4..ed847d8ce 100644 --- a/tests/integration/test_issue_comment.py +++ b/tests/integration/test_issue_comment.py @@ -63,7 +63,7 @@ def issue_comment_propose_downstream_event(forge): return json.loads( - (DATA_DIR / "webhooks" / forge / "issue_propose_downstream.json").read_text() + (DATA_DIR / "webhooks" / forge / "issue_propose_downstream.json").read_text(), ) @@ -108,7 +108,7 @@ def mock_comment(request): ) issue = flexmock( description="Packit failed on creating pull-requests in dist-git " - "(https://src.fedoraproject.org/rpms/packit.git):" + "(https://src.fedoraproject.org/rpms/packit.git):", ) flexmock(SteveJobs).should_receive("search_distgit_config_in_issue").never() flexmock(PackageConfigGetter).should_call("get_package_config_from_repo").with_args( @@ -199,7 +199,7 @@ def test_issue_comment_propose_downstream_handler( .once() .mock(), git=flexmock(clear_cache=lambda: None), - ) + ), ) db_project_object = flexmock( @@ -208,7 +208,7 @@ def test_issue_comment_propose_downstream_handler( project_event_model_type=ProjectEventModelType.issue, ) flexmock(IssueCommentGitlabEvent).should_receive("db_project_object").and_return( - db_project_object + db_project_object, ) db_project_event = ( flexmock( @@ -220,7 +220,9 @@ def test_issue_comment_propose_downstream_handler( .mock() ) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.issue, event_id=123, commit_sha=None + type=ProjectEventModelType.issue, + event_id=123, + commit_sha=None, ).and_return(db_project_event) flexmock(IssueModel).should_receive("get_or_create").and_return(db_project_object) @@ -241,31 +243,32 @@ def test_issue_comment_propose_downstream_handler( ).and_return(sync_release_pr_model) model = flexmock(status="queued", id=1234, branch="main") flexmock(SyncReleaseTargetModel).should_receive("create").with_args( - status=SyncReleaseTargetStatus.queued, branch="main" + status=SyncReleaseTargetStatus.queued, + branch="main", ).and_return(model).once() flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.running + status=SyncReleaseTargetStatus.running, ).once() flexmock(model).should_receive("set_downstream_pr_url").with_args( - downstream_pr_url="https://xyz" + downstream_pr_url="https://xyz", ) flexmock(model).should_receive("set_downstream_pr").with_args( - downstream_pr=sync_release_pr_model + downstream_pr=sync_release_pr_model, ).once() flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.submitted + status=SyncReleaseTargetStatus.submitted, ).once() flexmock(model).should_receive("set_start_time").once() flexmock(model).should_receive("set_finished_time").once() flexmock(model).should_receive("set_logs").once() flexmock(propose_downstream_model).should_receive("set_status").with_args( - status=SyncReleaseStatus.finished + status=SyncReleaseStatus.finished, ).once() flexmock(group).should_receive("apply_async").once() flexmock(Pushgateway).should_receive("push").times(3).and_return() flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_to_all" + "report_status_to_all", ).with_args( description=TASK_ACCEPTED, state=BaseCommitStatus.pending, @@ -278,7 +281,7 @@ def test_issue_comment_propose_downstream_handler( url = get_propose_downstream_info_url(model.id) flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_for_branch" + "report_status_for_branch", ).with_args( branch="main", description="Starting propose downstream...", @@ -287,7 +290,7 @@ def test_issue_comment_propose_downstream_handler( ) flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_for_branch" + "report_status_for_branch", ).with_args( branch="main", description="Propose downstream finished successfully.", @@ -297,7 +300,7 @@ def test_issue_comment_propose_downstream_handler( processing_results = SteveJobs().process_message(comment_event) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -330,7 +333,8 @@ def mock_repository_issue_retriggering(): flexmock(GithubProject).should_receive("get_issue").and_return(issue).mock() ) flexmock(PackageConfigGetter).should_call("get_package_config_from_repo").with_args( - project=PagureProject, fail_when_missing=False + project=PagureProject, + fail_when_missing=False, ).and_return(PackageConfig) project.should_receive("get_releases").and_return([flexmock(tag_name="123")]) @@ -342,7 +346,7 @@ def mock_repository_issue_retriggering(): project_event_model_type=ProjectEventModelType.issue, ) flexmock(IssueCommentEvent).should_receive("db_project_object").and_return( - db_project_object + db_project_object, ) db_project_event = ( @@ -354,7 +358,7 @@ def mock_repository_issue_retriggering(): flexmock(IssueModel).should_receive("get_or_create").and_return(db_project_object) flexmock(ProjectEventModel).should_receive("get_or_create").and_return( - db_project_event + db_project_event, ) flexmock(PipelineModel).should_receive("create") koji_build_f37 = flexmock( @@ -379,7 +383,7 @@ def mock_repository_issue_retriggering(): flexmock(KojiBuildTargetModel).should_receive("create") flexmock(KojiBuildGroupModel).should_receive("create").and_return( - flexmock(grouped_targets=[koji_build_f38, koji_build_f37]) + flexmock(grouped_targets=[koji_build_f38, koji_build_f37]), ) comment = flexmock() @@ -398,7 +402,7 @@ def github_repository_issue_comment_retrigger_bodhi_update(): / "webhooks" / "github" / "repository_issue_comment_retrigger_bodhi_update.json" - ).read_text() + ).read_text(), ) @@ -407,10 +411,10 @@ def test_issue_comment_retrigger_bodhi_update_handler( github_repository_issue_comment_retrigger_bodhi_update, ): processing_results = SteveJobs().process_message( - github_repository_issue_comment_retrigger_bodhi_update + github_repository_issue_comment_retrigger_bodhi_update, ) event_dict, _, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -422,14 +426,15 @@ def test_issue_comment_retrigger_bodhi_update_handler( alias=None, ).and_return(("alias", "url")) flexmock(KojiHelper).should_receive("get_latest_candidate_build").with_args( - "python-teamcity-messages", "f38" + "python-teamcity-messages", + "f38", ).and_return( { "nvr": "python-teamcity-messages.fc38", "build_id": 2, "state": 1, "task_id": 123, - } + }, ) flexmock(PackitAPI).should_receive("create_update").with_args( dist_git_branch="f37", @@ -439,14 +444,15 @@ def test_issue_comment_retrigger_bodhi_update_handler( alias=None, ).and_return(("alias", "url")) flexmock(KojiHelper).should_receive("get_latest_candidate_build").with_args( - "python-teamcity-messages", "f37" + "python-teamcity-messages", + "f37", ).and_return( { "nvr": "python-teamcity-messages.fc37", "build_id": 1, "state": 1, "task_id": 123, - } + }, ) run_model_flexmock = flexmock() @@ -509,7 +515,7 @@ def github_repository_issue_comment_retrigger_koji_build(): / "webhooks" / "github" / "repository_issue_comment_retrigger_koji_build.json" - ).read_text() + ).read_text(), ) @@ -518,10 +524,10 @@ def test_issue_comment_retrigger_koji_build_handler( github_repository_issue_comment_retrigger_koji_build, ): processing_results = SteveJobs().process_message( - github_repository_issue_comment_retrigger_koji_build + github_repository_issue_comment_retrigger_koji_build, ) event_dict, _, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -540,10 +546,10 @@ def test_issue_comment_retrigger_koji_build_handler( koji_target=None, ).and_return("") flexmock(RetriggerDownstreamKojiBuildHandler).should_receive( - "local_project" + "local_project", ).and_return(flexmock()) flexmock(RetriggerDownstreamKojiBuildHandler).should_receive( - "is_already_triggered" + "is_already_triggered", ).and_return(False) results = run_retrigger_downstream_koji_build( @@ -560,10 +566,10 @@ def test_issue_comment_retrigger_koji_build_error_msg( github_repository_issue_comment_retrigger_koji_build, ): processing_results = SteveJobs().process_message( - github_repository_issue_comment_retrigger_koji_build + github_repository_issue_comment_retrigger_koji_build, ) event_dict, _, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -589,7 +595,7 @@ def test_issue_comment_retrigger_koji_build_error_msg( # "a repo" # ) flexmock(RetriggerDownstreamKojiBuildHandler).should_receive( - "packit_api" + "packit_api", ).and_return(packit_api) msg = ( "Packit failed on creating Koji build in dist-git (an url):" @@ -609,7 +615,7 @@ def test_issue_comment_retrigger_koji_build_error_msg( comment_to_existing=msg, ).once() flexmock(RetriggerDownstreamKojiBuildHandler).should_receive( - "is_already_triggered" + "is_already_triggered", ).and_return(False) run_retrigger_downstream_koji_build( diff --git a/tests/integration/test_koji_build.py b/tests/integration/test_koji_build.py index 76f5c6ffe..2505d4f2c 100644 --- a/tests/integration/test_koji_build.py +++ b/tests/integration/test_koji_build.py @@ -42,7 +42,8 @@ @pytest.mark.parametrize( - "koji_build_fixture", [koji_build_start_rawhide, koji_build_completed_rawhide] + "koji_build_fixture", + [koji_build_start_rawhide, koji_build_completed_rawhide], ) def test_downstream_koji_build_report_known_build(koji_build_fixture, request): koji_build_event = request.getfixturevalue(koji_build_fixture.__name__) @@ -58,13 +59,16 @@ def test_downstream_koji_build_report_known_build(koji_build_fixture, request): default_branch="main", ) pagure_project.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["python-ogr.spec"]) pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["python-ogr.spec", ".packit.yaml"]) flexmock(GitBranchModel).should_receive("get_or_create").with_args( @@ -80,7 +84,7 @@ def test_downstream_koji_build_report_known_build(koji_build_fixture, request): # Database flexmock(KojiBuildTargetModel).should_receive("get_by_task_id").with_args( - task_id=80860894 + task_id=80860894, ).and_return( flexmock( target="target", @@ -88,7 +92,8 @@ def test_downstream_koji_build_report_known_build(koji_build_fixture, request): web_url="some-url", build_logs_url=None, get_project_event_object=lambda: flexmock( - id=1, job_config_trigger_type=JobConfigTriggerType.commit + id=1, + job_config_trigger_type=JobConfigTriggerType.commit, ), set_status=lambda x: None, set_build_start_time=lambda x: None, @@ -97,13 +102,13 @@ def test_downstream_koji_build_report_known_build(koji_build_fixture, request): .should_receive("set_build_logs_urls") .with_args({}) .and_return() - .mock() + .mock(), ).once() # only when running a handler processing_results = SteveJobs().process_message(koji_build_event) # 1*KojiBuildReportHandler event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) results = run_downstream_koji_build_report( @@ -129,13 +134,16 @@ def test_koji_build_error_msg(distgit_push_packit): default_branch="main", ) pagure_project.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["packit.spec"]) pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["packit.spec", ".packit.yaml"]) db_project_object = flexmock( @@ -150,13 +158,13 @@ def test_koji_build_error_msg(distgit_push_packit): .mock() ) flexmock(PushPagureEvent).should_receive("db_project_object").and_return( - db_project_object + db_project_object, ) flexmock(GitBranchModel).should_receive("get_or_create").and_return( - db_project_object + db_project_object, ) flexmock(ProjectEventModel).should_receive("get_or_create").and_return( - db_project_event + db_project_event, ) flexmock(PipelineModel).should_receive("create") koji_build = flexmock( @@ -171,7 +179,7 @@ def test_koji_build_error_msg(distgit_push_packit): flexmock(KojiBuildTargetModel).should_receive("create").and_return(koji_build) flexmock(KojiBuildGroupModel).should_receive("create").and_return( - flexmock(grouped_targets=[koji_build]) + flexmock(grouped_targets=[koji_build]), ) flexmock(DownstreamKojiBuildHandler).should_receive("pre_check").and_return(True) @@ -180,7 +188,7 @@ def test_koji_build_error_msg(distgit_push_packit): processing_results = SteveJobs().process_message(distgit_push_packit) event_dict, _, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -194,7 +202,7 @@ def test_koji_build_error_msg(distgit_push_packit): .mock() ) flexmock(DownstreamKojiBuildHandler).should_receive("packit_api").and_return( - packit_api + packit_api, ) msg = ( "Packit failed on creating Koji build in dist-git (an url):\n\n" @@ -219,7 +227,7 @@ def test_koji_build_error_msg(distgit_push_packit): comment_to_existing=msg, ).once() flexmock(DownstreamKojiBuildHandler).should_receive( - "is_already_triggered" + "is_already_triggered", ).and_return(False) run_downstream_koji_build( @@ -240,7 +248,7 @@ def test_koji_build_error_msg(distgit_push_packit): ) def test_is_already_triggered(build_info, result): flexmock(PackitAPI).should_receive("dg").and_return( - flexmock(get_nvr=lambda branch: "some-nvr") + flexmock(get_nvr=lambda branch: "some-nvr"), ) flexmock(KojiHelper).should_receive("get_build_info").and_return(build_info) diff --git a/tests/integration/test_listen_to_fedmsg.py b/tests/integration/test_listen_to_fedmsg.py index ae6406f9d..29a837a92 100644 --- a/tests/integration/test_listen_to_fedmsg.py +++ b/tests/integration/test_listen_to_fedmsg.py @@ -80,7 +80,7 @@ def mock_get_valid_build_targets(): "fedora-32-x86_64", "fedora-31-x86_64", "fedora-rawhide-x86_64", - } + }, ) @@ -117,7 +117,7 @@ def srpm_build_end(): @pytest.fixture(scope="module") def koji_build_scratch_start(): return json.loads( - (DATA_DIR / "fedmsg" / "koji_build_scratch_start.json").read_text() + (DATA_DIR / "fedmsg" / "koji_build_scratch_start.json").read_text(), ) @@ -137,14 +137,14 @@ def pc_build_pr(): "package": CommonPackageConfig( _targets=["fedora-all"], specfile_path="test.spec", - ) + ), }, - ) + ), ], packages={ "package": CommonPackageConfig( specfile_path="test.spec", - ) + ), }, ) @@ -160,14 +160,14 @@ def pc_koji_build_pr(): "package": CommonPackageConfig( _targets=["fedora-all"], specfile_path="test.spec", - ) + ), }, - ) + ), ], packages={ "package": CommonPackageConfig( specfile_path="test.spec", - ) + ), }, ) @@ -186,7 +186,7 @@ def pc_koji_build_tag_specfile(): _targets=["fedora-all"], specfile_path="python-specfile.spec", downstream_package_name="python-specfile", - ) + ), }, ), ], @@ -213,7 +213,7 @@ def pc_koji_build_tag_packit(): _targets=["fedora-all"], specfile_path="packit.spec", downstream_package_name="packit", - ) + ), }, ), JobConfig( @@ -226,7 +226,7 @@ def pc_koji_build_tag_packit(): _targets=["fedora-all"], specfile_path="packit.spec", downstream_package_name="packit", - ) + ), }, ), ], @@ -251,14 +251,14 @@ def pc_build_push(): _targets=["fedora-all"], specfile_path="test.spec", branch="build-branch", - ) + ), }, - ) + ), ], packages={ "package": CommonPackageConfig( specfile_path="test.spec", - ) + ), }, ) @@ -274,14 +274,14 @@ def pc_build_release(): "package": CommonPackageConfig( _targets=["fedora-all"], specfile_path="test.spec", - ) + ), }, - ) + ), ], packages={ "package": CommonPackageConfig( specfile_path="test.spec", - ) + ), }, ) @@ -337,7 +337,7 @@ def get_comments(*args, **kwargs): "`dnf copr enable packit/packit-service-hello-world-24`\n* " "And now you can install the packages.\n\n" "Please note that the RPMs should be used only in a testing environment.", - ) + ), ] else: return [] @@ -347,17 +347,17 @@ def get_comments(*args, **kwargs): flexmock(GithubProject).should_receive("get_pr").and_return(pr) pc_build_pr.jobs[0].notifications.pull_request.successful_build = pc_comment_pr_succ flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - pc_build_pr + pc_build_pr, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) if pr_comment_called and not pr_comment_exists: pr.should_receive("comment") else: pr.should_receive("comment").never() flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_pr + copr_build_pr, ) copr_build_pr.should_call("set_status").with_args(BuildStatus.success).once() @@ -404,14 +404,14 @@ def get_comments(*args, **kwargs): # fix SRPM url since it touches multiple classes flexmock(copr_build_pr._srpm_build_for_mocking).should_receive("set_url").with_args( - "https://my.host/my.srpm" + "https://my.host/my.srpm", ).mock() flexmock(Pushgateway).should_receive("push").times(2).and_return() processing_results = SteveJobs().process_message(copr_build_end) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -425,24 +425,26 @@ def get_comments(*args, **kwargs): def test_copr_build_end_push( - copr_build_end_push, pc_build_push, copr_build_branch_push + copr_build_end_push, + pc_build_push, + copr_build_branch_push, ): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_pr").and_return( # we cannot comment for branch push events flexmock(source_project=flexmock()) .should_receive("comment") - .never() + .never(), ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - pc_build_push + pc_build_push, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_branch_push + copr_build_branch_push, ) copr_build_branch_push.should_receive("set_status").with_args(BuildStatus.success) @@ -483,7 +485,7 @@ def test_copr_build_end_push( processing_results = SteveJobs().process_message(copr_build_end_push) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -497,7 +499,9 @@ def test_copr_build_end_push( def test_copr_build_end_release( - copr_build_end_release, pc_build_release, copr_build_release + copr_build_end_release, + pc_build_release, + copr_build_release, ): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_pr").and_return( @@ -505,17 +509,17 @@ def test_copr_build_end_release( flexmock(source_project=flexmock()) .should_receive("comment") .never() - .mock() + .mock(), ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - pc_build_release + pc_build_release, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_release + copr_build_release, ) copr_build_release.should_receive("set_status").with_args(BuildStatus.success) copr_build_release.should_receive("set_end_time").once() @@ -540,7 +544,8 @@ def test_copr_build_end_release( flexmock(celery_group).should_receive("apply_async").once() flexmock(CoprBuildJobHelper).should_receive("get_build_chroot").with_args( - 1, "some-target" + 1, + "some-target", ).and_return(flexmock(ended_on=1666889710)).once() # skip SRPM url since it touches multiple classes @@ -550,7 +555,7 @@ def test_copr_build_end_release( processing_results = SteveJobs().process_message(copr_build_end_release) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -573,10 +578,10 @@ def test_copr_build_end_testing_farm(copr_build_end, copr_build_pr): flexmock(GithubProject).should_receive("get_pr").and_return( flexmock( source_project=flexmock( - get_web_url=lambda: "https://github.com/source/bar" + get_web_url=lambda: "https://github.com/source/bar", ), target_project=flexmock( - get_web_url=lambda: "https://github.com/target/bar" + get_web_url=lambda: "https://github.com/target/bar", ), head_commit="0011223344", target_branch_head_commit="deadbeef", @@ -584,7 +589,7 @@ def test_copr_build_end_testing_farm(copr_build_end, copr_build_pr): target_branch="the-target-branch", ) .should_receive("comment") - .mock() + .mock(), ) urls.DASHBOARD_URL = "https://dashboard.localhost" @@ -592,7 +597,7 @@ def test_copr_build_end_testing_farm(copr_build_end, copr_build_pr): packages={ "package": CommonPackageConfig( specfile_path="test.spec", - ) + ), }, jobs=[ JobConfig( @@ -602,7 +607,7 @@ def test_copr_build_end_testing_farm(copr_build_end, copr_build_pr): "package": CommonPackageConfig( _targets=["fedora-rawhide"], specfile_path="test.spec", - ) + ), }, ), JobConfig( @@ -612,26 +617,26 @@ def test_copr_build_end_testing_farm(copr_build_end, copr_build_pr): "package": CommonPackageConfig( _targets=["fedora-rawhide"], specfile_path="test.spec", - ) + ), }, ), ], ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - config + config, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(config) flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(None) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_pr + copr_build_pr, ) flexmock(CoprBuildTargetModel).should_receive("get_by_id").and_return(copr_build_pr) copr_build_pr.should_call("set_status").with_args(BuildStatus.success).once() @@ -669,7 +674,7 @@ def test_copr_build_end_testing_farm(copr_build_end, copr_build_pr): "ref": "0011223344", "merge_sha": "deadbeef", "path": ".", - } + }, }, "environments": [ { @@ -681,7 +686,7 @@ def test_copr_build_end_testing_farm(copr_build_end, copr_build_pr): "arch": "x86_64", "trigger": "commit", "initiator": "packit", - } + }, }, "artifacts": [ { @@ -705,31 +710,31 @@ def test_copr_build_end_testing_farm(copr_build_end, copr_build_pr): "PACKIT_COPR_PROJECT": "some-owner/some-project", "PACKIT_COPR_RPMS": "hello-world-0.1-1.noarch", }, - } + }, ], "notification": { "webhook": { "url": "https://prod.packit.dev/api/testing-farm/results", "token": "secret token", - } + }, }, } flexmock(TestingFarmJobHelper).should_receive("is_fmf_configured").and_return(True) flexmock(TestingFarmJobHelper).should_receive("distro2compose").with_args( - "fedora-rawhide-x86_64" + "fedora-rawhide-x86_64", ).and_return("Fedora-Rawhide") pipeline_id = "5e8079d8-f181-41cf-af96-28e99774eb68" flexmock(TestingFarmJobHelper).should_receive( - "send_testing_farm_request" + "send_testing_farm_request", ).with_args(endpoint="requests", method="POST", data=payload).and_return( RequestResponse( status_code=200, ok=True, content=json.dumps({"id": pipeline_id}).encode(), json={"id": pipeline_id}, - ) + ), ) flexmock(StatusReporter).should_receive("report").with_args( @@ -743,7 +748,7 @@ def test_copr_build_end_testing_farm(copr_build_end, copr_build_pr): ).once() flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/foo/bar" + "https://github.com/foo/bar", ) tft_test_run_model = ( @@ -760,7 +765,7 @@ def test_copr_build_end_testing_farm(copr_build_end, copr_build_pr): ) group = flexmock(grouped_targets=[tft_test_run_model]) flexmock(TFTTestRunGroupModel).should_receive("create").with_args( - [copr_build_pr.group_of_targets.runs[-1]] + [copr_build_pr.group_of_targets.runs[-1]], ).and_return(group) flexmock(TFTTestRunTargetModel).should_receive("create").with_args( pipeline_id=None, @@ -801,7 +806,7 @@ def test_copr_build_end_testing_farm(copr_build_end, copr_build_pr): processing_results = SteveJobs().process_message(copr_build_end) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -814,7 +819,7 @@ def test_copr_build_end_testing_farm(copr_build_end, copr_build_pr): ) flexmock(CoprBuildTargetModel).should_receive("get_all_by").and_return( - [copr_build_pr] + [copr_build_pr], ) event_dict["tests_targets_override"] = ["fedora-rawhide-x86_64"] run_testing_farm_handler( @@ -835,10 +840,10 @@ def test_copr_build_end_testing_farm_pr_branch(copr_build_end, copr_build_pr): flexmock(GithubProject).should_receive("get_pr").and_return( flexmock( source_project=flexmock( - get_web_url=lambda: "https://github.com/source/bar" + get_web_url=lambda: "https://github.com/source/bar", ), target_project=flexmock( - get_web_url=lambda: "https://github.com/target/bar" + get_web_url=lambda: "https://github.com/target/bar", ), head_commit="0011223344", target_branch_head_commit="deadbeef", @@ -846,7 +851,7 @@ def test_copr_build_end_testing_farm_pr_branch(copr_build_end, copr_build_pr): target_branch="the-target-branch", ) .should_receive("comment") - .mock() + .mock(), ) urls.DASHBOARD_URL = "https://dashboard.localhost" @@ -854,7 +859,7 @@ def test_copr_build_end_testing_farm_pr_branch(copr_build_end, copr_build_pr): packages={ "package": CommonPackageConfig( specfile_path="test.spec", - ) + ), }, jobs=[ JobConfig( @@ -864,7 +869,7 @@ def test_copr_build_end_testing_farm_pr_branch(copr_build_end, copr_build_pr): "package": CommonPackageConfig( _targets=["fedora-rawhide"], specfile_path="test.spec", - ) + ), }, ), JobConfig( @@ -875,26 +880,26 @@ def test_copr_build_end_testing_farm_pr_branch(copr_build_end, copr_build_pr): _targets=["fedora-rawhide"], specfile_path="test.spec", branch="the-target-branch", - ) + ), }, ), ], ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - config + config, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(config) flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(None) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_pr + copr_build_pr, ) flexmock(CoprBuildTargetModel).should_receive("get_by_id").and_return(copr_build_pr) copr_build_pr.should_call("set_status").with_args(BuildStatus.success).once() @@ -925,7 +930,7 @@ def test_copr_build_end_testing_farm_pr_branch(copr_build_end, copr_build_pr): ).once() flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/foo/bar" + "https://github.com/foo/bar", ) flexmock(Signature).should_receive("apply_async").once() @@ -947,7 +952,7 @@ def test_copr_build_end_testing_farm_pr_branch(copr_build_end, copr_build_pr): processing_results = SteveJobs().process_message(copr_build_end) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -970,10 +975,10 @@ def test_copr_build_end_testing_farm_different_pr_branch(copr_build_end, copr_bu flexmock(GithubProject).should_receive("get_pr").and_return( flexmock( source_project=flexmock( - get_web_url=lambda: "https://github.com/source/bar" + get_web_url=lambda: "https://github.com/source/bar", ), target_project=flexmock( - get_web_url=lambda: "https://github.com/target/bar" + get_web_url=lambda: "https://github.com/target/bar", ), head_commit="0011223344", target_branch_head_commit="deadbeef", @@ -981,7 +986,7 @@ def test_copr_build_end_testing_farm_different_pr_branch(copr_build_end, copr_bu target_branch="the-target-branch", ) .should_receive("comment") - .mock() + .mock(), ) urls.DASHBOARD_URL = "https://dashboard.localhost" @@ -989,7 +994,7 @@ def test_copr_build_end_testing_farm_different_pr_branch(copr_build_end, copr_bu packages={ "package": CommonPackageConfig( specfile_path="test.spec", - ) + ), }, jobs=[ JobConfig( @@ -999,7 +1004,7 @@ def test_copr_build_end_testing_farm_different_pr_branch(copr_build_end, copr_bu "package": CommonPackageConfig( _targets=["fedora-rawhide"], specfile_path="test.spec", - ) + ), }, ), JobConfig( @@ -1010,26 +1015,26 @@ def test_copr_build_end_testing_farm_different_pr_branch(copr_build_end, copr_bu _targets=["fedora-rawhide"], specfile_path="test.spec", branch="the-other-branch", - ) + ), }, ), ], ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - config + config, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(config) flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(None) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_pr + copr_build_pr, ) flexmock(CoprBuildTargetModel).should_receive("get_by_id").and_return(copr_build_pr) copr_build_pr.should_call("set_status").with_args(BuildStatus.success).once() @@ -1060,7 +1065,7 @@ def test_copr_build_end_testing_farm_different_pr_branch(copr_build_end, copr_bu ).never() flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/foo/bar" + "https://github.com/foo/bar", ) flexmock(celery_group).should_receive("apply_async").once() @@ -1081,7 +1086,7 @@ def test_copr_build_end_testing_farm_different_pr_branch(copr_build_end, copr_bu processing_results = SteveJobs().process_message(copr_build_end) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -1102,7 +1107,10 @@ def test_copr_build_end_testing_farm_different_pr_branch(copr_build_end, copr_bu ), ) def test_copr_build_end_testing_farm_manual_trigger( - copr_build_end, copr_build_pr, build_status, report_manual_triggered_times + copr_build_end, + copr_build_pr, + build_status, + report_manual_triggered_times, ): ServiceConfig.get_service_config().testing_farm_api_url = ( "https://api.dev.testing-farm.io/v0.1/" @@ -1113,10 +1121,10 @@ def test_copr_build_end_testing_farm_manual_trigger( flexmock(GithubProject).should_receive("get_pr").and_return( flexmock( source_project=flexmock( - get_web_url=lambda: "https://github.com/source/bar" + get_web_url=lambda: "https://github.com/source/bar", ), target_project=flexmock( - get_web_url=lambda: "https://github.com/target/bar" + get_web_url=lambda: "https://github.com/target/bar", ), head_commit="0011223344", target_branch_head_commit="deadbeef", @@ -1124,7 +1132,7 @@ def test_copr_build_end_testing_farm_manual_trigger( target_branch="the-target-branch", ) .should_receive("comment") - .mock() + .mock(), ) urls.DASHBOARD_URL = "https://dashboard.localhost" @@ -1132,7 +1140,7 @@ def test_copr_build_end_testing_farm_manual_trigger( packages={ "package": CommonPackageConfig( specfile_path="test.spec", - ) + ), }, jobs=[ JobConfig( @@ -1142,7 +1150,7 @@ def test_copr_build_end_testing_farm_manual_trigger( "package": CommonPackageConfig( _targets=["fedora-rawhide"], specfile_path="test.spec", - ) + ), }, ), JobConfig( @@ -1153,26 +1161,26 @@ def test_copr_build_end_testing_farm_manual_trigger( "package": CommonPackageConfig( _targets=["fedora-rawhide"], specfile_path="test.spec", - ) + ), }, ), ], ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - config + config, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(config) flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(None) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_pr + copr_build_pr, ) flexmock(CoprBuildTargetModel).should_receive("get_by_id").and_return(copr_build_pr) copr_build_pr.should_call("set_status").with_args(build_status).once() @@ -1214,7 +1222,7 @@ def test_copr_build_end_testing_farm_manual_trigger( ).times(report_manual_triggered_times) flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/foo/bar" + "https://github.com/foo/bar", ) flexmock(celery_group).should_receive("apply_async").once() @@ -1236,7 +1244,7 @@ def test_copr_build_end_testing_farm_manual_trigger( copr_event["status"] = 1 if build_status == BuildStatus.success else 0 processing_results = SteveJobs().process_message(copr_event) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -1259,10 +1267,10 @@ def test_copr_build_end_testing_farm_labels_matching(copr_build_end, copr_build_ flexmock(GithubProject).should_receive("get_pr").and_return( flexmock( source_project=flexmock( - get_web_url=lambda: "https://github.com/source/bar" + get_web_url=lambda: "https://github.com/source/bar", ), target_project=flexmock( - get_web_url=lambda: "https://github.com/target/bar" + get_web_url=lambda: "https://github.com/target/bar", ), head_commit="0011223344", target_branch_head_commit="deadbeef", @@ -1272,7 +1280,7 @@ def test_copr_build_end_testing_farm_labels_matching(copr_build_end, copr_build_ labels=[flexmock(name="a-label")], ) .should_receive("comment") - .mock() + .mock(), ) urls.DASHBOARD_URL = "https://dashboard.localhost" @@ -1280,7 +1288,7 @@ def test_copr_build_end_testing_farm_labels_matching(copr_build_end, copr_build_ packages={ "package": CommonPackageConfig( specfile_path="test.spec", - ) + ), }, jobs=[ JobConfig( @@ -1290,7 +1298,7 @@ def test_copr_build_end_testing_farm_labels_matching(copr_build_end, copr_build_ "package": CommonPackageConfig( _targets=["fedora-rawhide"], specfile_path="test.spec", - ) + ), }, ), JobConfig( @@ -1301,28 +1309,28 @@ def test_copr_build_end_testing_farm_labels_matching(copr_build_end, copr_build_ _targets=["fedora-rawhide"], specfile_path="test.spec", require=RequirementsConfig( - label=LabelRequirementsConfig(present=["a-label"]) + label=LabelRequirementsConfig(present=["a-label"]), ), - ) + ), }, ), ], ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - config + config, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(config) flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(None) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_pr + copr_build_pr, ) flexmock(CoprBuildTargetModel).should_receive("get_by_id").and_return(copr_build_pr) copr_build_pr.should_call("set_status").with_args(BuildStatus.success).once() @@ -1353,7 +1361,7 @@ def test_copr_build_end_testing_farm_labels_matching(copr_build_end, copr_build_ ).once() flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/foo/bar" + "https://github.com/foo/bar", ) flexmock(Signature).should_receive("apply_async").once() @@ -1375,7 +1383,7 @@ def test_copr_build_end_testing_farm_labels_matching(copr_build_end, copr_build_ processing_results = SteveJobs().process_message(copr_build_end) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -1398,10 +1406,10 @@ def test_copr_build_end_testing_farm_labels_not_matching(copr_build_end, copr_bu flexmock(GithubProject).should_receive("get_pr").and_return( flexmock( source_project=flexmock( - get_web_url=lambda: "https://github.com/source/bar" + get_web_url=lambda: "https://github.com/source/bar", ), target_project=flexmock( - get_web_url=lambda: "https://github.com/target/bar" + get_web_url=lambda: "https://github.com/target/bar", ), head_commit="0011223344", target_branch_head_commit="deadbeef", @@ -1411,7 +1419,7 @@ def test_copr_build_end_testing_farm_labels_not_matching(copr_build_end, copr_bu labels=[flexmock(name="another-label")], ) .should_receive("comment") - .mock() + .mock(), ) urls.DASHBOARD_URL = "https://dashboard.localhost" @@ -1419,7 +1427,7 @@ def test_copr_build_end_testing_farm_labels_not_matching(copr_build_end, copr_bu packages={ "package": CommonPackageConfig( specfile_path="test.spec", - ) + ), }, jobs=[ JobConfig( @@ -1429,7 +1437,7 @@ def test_copr_build_end_testing_farm_labels_not_matching(copr_build_end, copr_bu "package": CommonPackageConfig( _targets=["fedora-rawhide"], specfile_path="test.spec", - ) + ), }, ), JobConfig( @@ -1440,28 +1448,28 @@ def test_copr_build_end_testing_farm_labels_not_matching(copr_build_end, copr_bu _targets=["fedora-rawhide"], specfile_path="test.spec", require=RequirementsConfig( - label=LabelRequirementsConfig(present=["a-label"]) + label=LabelRequirementsConfig(present=["a-label"]), ), - ) + ), }, ), ], ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - config + config, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(config) flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(None) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_pr + copr_build_pr, ) flexmock(CoprBuildTargetModel).should_receive("get_by_id").and_return(copr_build_pr) copr_build_pr.should_call("set_status").with_args(BuildStatus.success).once() @@ -1492,7 +1500,7 @@ def test_copr_build_end_testing_farm_labels_not_matching(copr_build_end, copr_bu ).once() flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/foo/bar" + "https://github.com/foo/bar", ) flexmock(celery_group).should_receive("apply_async").once() @@ -1513,7 +1521,7 @@ def test_copr_build_end_testing_farm_labels_not_matching(copr_build_end, copr_bu processing_results = SteveJobs().process_message(copr_build_end) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -1531,7 +1539,7 @@ def test_copr_build_end_push_testing_farm(copr_build_end_push, copr_build_branch packages={ "package": CommonPackageConfig( specfile_path="test.spec", - ) + ), }, jobs=[ JobConfig( @@ -1542,7 +1550,7 @@ def test_copr_build_end_push_testing_farm(copr_build_end_push, copr_build_branch _targets=["fedora-all"], specfile_path="test.spec", branch="build-branch", - ) + ), }, ), JobConfig( @@ -1553,17 +1561,17 @@ def test_copr_build_end_push_testing_farm(copr_build_end_push, copr_build_branch _targets=["fedora-all"], specfile_path="test.spec", branch="build-branch", - ) + ), }, ), ], ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - config + config, ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(config) flexmock(GithubProject).should_receive("is_private").and_return(False) @@ -1571,14 +1579,14 @@ def test_copr_build_end_push_testing_farm(copr_build_end_push, copr_build_branch # we cannot comment for branch push events flexmock(source_project=flexmock()) .should_receive("comment") - .never() + .never(), ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_branch_push + copr_build_branch_push, ) copr_build_branch_push.should_receive("set_status").with_args(BuildStatus.success) @@ -1588,7 +1596,7 @@ def test_copr_build_end_push_testing_farm(copr_build_end_push, copr_build_branch flexmock(requests).should_receive("get").and_return(requests.Response()) flexmock(requests.Response).should_receive("raise_for_status").and_return(None) flexmock(CoprBuildJobHelper).should_receive( - "report_status_to_build_for_chroot" + "report_status_to_build_for_chroot", ).with_args( state=BaseCommitStatus.success, description="RPMs were built successfully.", @@ -1596,7 +1604,7 @@ def test_copr_build_end_push_testing_farm(copr_build_end_push, copr_build_branch chroot=copr_build_end_push["chroot"], ).once() flexmock(CoprBuildJobHelper).should_receive( - "report_status_to_all_test_jobs_for_chroot" + "report_status_to_all_test_jobs_for_chroot", ).with_args( state=BaseCommitStatus.pending, description="RPMs were built successfully.", @@ -1623,7 +1631,7 @@ def test_copr_build_end_push_testing_farm(copr_build_end_push, copr_build_branch processing_results = SteveJobs().process_message(copr_build_end_push) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -1637,13 +1645,14 @@ def test_copr_build_end_push_testing_farm(copr_build_end_push, copr_build_branch def test_copr_build_end_push_testing_farm_different_branch( - copr_build_end_push, copr_build_branch_push + copr_build_end_push, + copr_build_branch_push, ): config = PackageConfig( packages={ "package": CommonPackageConfig( specfile_path="test.spec", - ) + ), }, jobs=[ JobConfig( @@ -1654,7 +1663,7 @@ def test_copr_build_end_push_testing_farm_different_branch( _targets=["fedora-all"], specfile_path="test.spec", branch="build-branch", - ) + ), }, ), JobConfig( @@ -1665,17 +1674,17 @@ def test_copr_build_end_push_testing_farm_different_branch( _targets=["fedora-all"], specfile_path="test.spec", branch="test-branch", - ) + ), }, ), ], ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - config + config, ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(config) flexmock(GithubProject).should_receive("is_private").and_return(False) @@ -1683,14 +1692,14 @@ def test_copr_build_end_push_testing_farm_different_branch( # we cannot comment for branch push events flexmock(source_project=flexmock()) .should_receive("comment") - .never() + .never(), ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_branch_push + copr_build_branch_push, ) copr_build_branch_push.should_receive("set_status").with_args(BuildStatus.success) @@ -1701,7 +1710,7 @@ def test_copr_build_end_push_testing_farm_different_branch( flexmock(requests.Response).should_receive("raise_for_status").and_return(None) # check if packit-service set correct PR status flexmock(CoprBuildJobHelper).should_receive( - "report_status_to_build_for_chroot" + "report_status_to_build_for_chroot", ).with_args( state=BaseCommitStatus.success, description="RPMs were built successfully.", @@ -1727,7 +1736,7 @@ def test_copr_build_end_push_testing_farm_different_branch( processing_results = SteveJobs().process_message(copr_build_end_push) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -1741,7 +1750,8 @@ def test_copr_build_end_push_testing_farm_different_branch( def test_copr_build_end_report_multiple_testing_farm_jobs( - copr_build_end, copr_build_pr + copr_build_end, + copr_build_pr, ): ServiceConfig.get_service_config().testing_farm_api_url = ( "https://api.dev.testing-farm.io/v0.1/" @@ -1752,10 +1762,10 @@ def test_copr_build_end_report_multiple_testing_farm_jobs( flexmock(GithubProject).should_receive("get_pr").and_return( flexmock( source_project=flexmock( - get_web_url=lambda: "https://github.com/source/bar" + get_web_url=lambda: "https://github.com/source/bar", ), target_project=flexmock( - get_web_url=lambda: "https://github.com/target/bar" + get_web_url=lambda: "https://github.com/target/bar", ), head_commit="0011223344", target_branch_head_commit="deadbeef", @@ -1763,7 +1773,7 @@ def test_copr_build_end_report_multiple_testing_farm_jobs( target_branch="the-target-branch", ) .should_receive("comment") - .mock() + .mock(), ) urls.DASHBOARD_URL = "https://dashboard.localhost" @@ -1771,7 +1781,7 @@ def test_copr_build_end_report_multiple_testing_farm_jobs( packages={ "package": CommonPackageConfig( specfile_path="test.spec", - ) + ), }, jobs=[ JobConfig( @@ -1781,7 +1791,7 @@ def test_copr_build_end_report_multiple_testing_farm_jobs( "package": CommonPackageConfig( _targets=["fedora-rawhide"], specfile_path="test.spec", - ) + ), }, ), JobConfig( @@ -1792,7 +1802,7 @@ def test_copr_build_end_report_multiple_testing_farm_jobs( identifier="test1", _targets=["fedora-rawhide"], specfile_path="test.spec", - ) + ), }, ), JobConfig( @@ -1803,26 +1813,26 @@ def test_copr_build_end_report_multiple_testing_farm_jobs( identifier="test2", _targets=["fedora-rawhide", "other-target"], specfile_path="test.spec", - ) + ), }, ), ], ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - config + config, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(config) flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(None) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_pr + copr_build_pr, ) flexmock(CoprBuildTargetModel).should_receive("get_by_id").and_return(copr_build_pr) copr_build_pr.should_call("set_status").with_args(BuildStatus.success).once() @@ -1865,7 +1875,7 @@ def test_copr_build_end_report_multiple_testing_farm_jobs( flexmock(TestingFarmJobHelper).should_receive("prepare_and_send_tf_request") flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/foo/bar" + "https://github.com/foo/bar", ) flexmock(Signature).should_receive("apply_async").times(2) @@ -1887,7 +1897,7 @@ def test_copr_build_end_report_multiple_testing_farm_jobs( processing_results = SteveJobs().process_message(copr_build_end) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -1903,15 +1913,15 @@ def test_copr_build_end_report_multiple_testing_farm_jobs( def test_copr_build_end_failed_testing_farm(copr_build_end, copr_build_pr): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/target/bar" + "https://github.com/target/bar", ) flexmock(GithubProject).should_receive("get_pr").and_return( flexmock( source_project=flexmock( - get_web_url=lambda: "https://github.com/source/bar" + get_web_url=lambda: "https://github.com/source/bar", ), target_project=flexmock( - get_web_url=lambda: "https://github.com/target/bar" + get_web_url=lambda: "https://github.com/target/bar", ), head_commit="0011223344", target_branch_head_commit="deadbeef", @@ -1919,14 +1929,14 @@ def test_copr_build_end_failed_testing_farm(copr_build_end, copr_build_pr): target_branch="the-target-branch", ) .should_receive("comment") - .mock() + .mock(), ) config = PackageConfig( packages={ "package": CommonPackageConfig( specfile_path="test.spec", - ) + ), }, jobs=[ JobConfig( @@ -1936,7 +1946,7 @@ def test_copr_build_end_failed_testing_farm(copr_build_end, copr_build_pr): "package": CommonPackageConfig( _targets=["fedora-rawhide"], specfile_path="test.spec", - ) + ), }, ), JobConfig( @@ -1946,26 +1956,26 @@ def test_copr_build_end_failed_testing_farm(copr_build_end, copr_build_pr): "package": CommonPackageConfig( _targets=["fedora-rawhide"], specfile_path="test.spec", - ) + ), }, ), ], ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - config + config, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(config) flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(None) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_pr + copr_build_pr, ) flexmock(CoprBuildTargetModel).should_receive("get_by_id").and_return(copr_build_pr) copr_build_pr.should_call("set_status").with_args(BuildStatus.success).once() @@ -2007,23 +2017,25 @@ def test_copr_build_end_failed_testing_farm(copr_build_end, copr_build_pr): ) flexmock(TFTTestRunTargetModel).should_receive("create").and_return(test) flexmock(TFTTestRunGroupModel).should_receive("create").with_args( - [copr_build_pr.group_of_targets.runs[-1]] + [copr_build_pr.group_of_targets.runs[-1]], ).and_return(flexmock(grouped_targets=[test])) flexmock(TestingFarmJobHelper).should_receive("is_fmf_configured").and_return(True) flexmock(TestingFarmJobHelper).should_receive("distro2compose").with_args( - "fedora-rawhide-x86_64" + "fedora-rawhide-x86_64", ).and_return("Fedora-Rawhide") flexmock(TestingFarmJobHelper).should_receive( - "send_testing_farm_request" + "send_testing_farm_request", ).and_return( RequestResponse( status_code=400, ok=False, content=b'{"errors": "some error"}', json={ - "errors": {"settings": {"pipeline": {"timeout": "unexpected type str"}}} + "errors": { + "settings": {"pipeline": {"timeout": "unexpected type str"}}, + }, }, - ) + ), ) flexmock(StatusReporter).should_receive("report").with_args( @@ -2067,7 +2079,7 @@ def test_copr_build_end_failed_testing_farm(copr_build_end, copr_build_pr): processing_results = SteveJobs().process_message(copr_build_end) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -2091,15 +2103,15 @@ def test_copr_build_end_failed_testing_farm(copr_build_end, copr_build_pr): def test_copr_build_end_failed_testing_farm_no_json(copr_build_end, copr_build_pr): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/target/bar" + "https://github.com/target/bar", ) flexmock(GithubProject).should_receive("get_pr").and_return( flexmock( source_project=flexmock( - get_web_url=lambda: "https://github.com/source/bar" + get_web_url=lambda: "https://github.com/source/bar", ), target_project=flexmock( - get_web_url=lambda: "https://github.com/target/bar" + get_web_url=lambda: "https://github.com/target/bar", ), head_commit="0011223344", target_branch_head_commit="deadbeef", @@ -2107,14 +2119,14 @@ def test_copr_build_end_failed_testing_farm_no_json(copr_build_end, copr_build_p target_branch="the-target-branch", ) .should_receive("comment") - .mock() + .mock(), ) config = PackageConfig( packages={ "package": CommonPackageConfig( specfile_path="test.spec", - ) + ), }, jobs=[ JobConfig( @@ -2124,7 +2136,7 @@ def test_copr_build_end_failed_testing_farm_no_json(copr_build_end, copr_build_p "package": CommonPackageConfig( _targets=["fedora-rawhide"], specfile_path="test.spec", - ) + ), }, ), JobConfig( @@ -2134,26 +2146,26 @@ def test_copr_build_end_failed_testing_farm_no_json(copr_build_end, copr_build_p "package": CommonPackageConfig( _targets=["fedora-rawhide"], specfile_path="test.spec", - ) + ), }, ), ], ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - config + config, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(config) flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(None) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_pr + copr_build_pr, ) flexmock(CoprBuildTargetModel).should_receive("get_by_id").and_return(copr_build_pr) copr_build_pr.should_call("set_status").with_args(BuildStatus.success).once() @@ -2194,15 +2206,15 @@ def test_copr_build_end_failed_testing_farm_no_json(copr_build_end, copr_build_p .mock() ) flexmock(TFTTestRunGroupModel).should_receive("create").with_args( - [copr_build_pr.group_of_targets.runs[-1]] + [copr_build_pr.group_of_targets.runs[-1]], ).and_return(flexmock(grouped_targets=[test])) flexmock(TFTTestRunTargetModel).should_receive("create").and_return(test) flexmock(TestingFarmJobHelper).should_receive("is_fmf_configured").and_return(True) flexmock(TestingFarmJobHelper).should_receive("distro2compose").with_args( - "fedora-rawhide-x86_64" + "fedora-rawhide-x86_64", ).and_return("Fedora-Rawhide") flexmock(TestingFarmJobHelper).should_receive( - "send_testing_farm_request" + "send_testing_farm_request", ).and_return( RequestResponse( status_code=400, @@ -2210,11 +2222,11 @@ def test_copr_build_end_failed_testing_farm_no_json(copr_build_end, copr_build_p content=b"some text error", reason="some text error", json=None, - ) + ), ) flexmock(CoprBuildTargetModel).should_receive("set_status").with_args( - BuildStatus.failure + BuildStatus.failure, ) flexmock(StatusReporter).should_receive("report").with_args( state=BaseCommitStatus.running, @@ -2253,7 +2265,7 @@ def test_copr_build_end_failed_testing_farm_no_json(copr_build_end, copr_build_p processing_results = SteveJobs().process_message(copr_build_end) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -2282,20 +2294,20 @@ def test_copr_build_end_failed_testing_farm_no_json(copr_build_end, copr_build_p def test_copr_build_start(copr_build_start, pc_build_pr, copr_build_pr): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_pr").and_return( - flexmock(source_project=flexmock()) + flexmock(source_project=flexmock()), ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - pc_build_pr + pc_build_pr, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(CoprBuildJobHelper).should_receive("get_build_check").and_return( - EXPECTED_BUILD_CHECK_NAME + EXPECTED_BUILD_CHECK_NAME, ) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_pr + copr_build_pr, ) url = get_copr_build_info_url(1) flexmock(requests).should_receive("get").and_return(requests.Response()) @@ -2322,7 +2334,7 @@ def test_copr_build_start(copr_build_start, pc_build_pr, copr_build_pr): processing_results = SteveJobs().process_message(copr_build_start) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -2337,20 +2349,20 @@ def test_copr_build_start_already_ended(copr_build_start, pc_build_pr, copr_buil copr_build_pr.status = BuildStatus.failure flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_pr").and_return( - flexmock(source_project=flexmock()) + flexmock(source_project=flexmock()), ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - pc_build_pr + pc_build_pr, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(CoprBuildJobHelper).should_receive("get_build_check").and_return( - EXPECTED_BUILD_CHECK_NAME + EXPECTED_BUILD_CHECK_NAME, ) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_pr + copr_build_pr, ) url = get_copr_build_info_url(1) flexmock(requests).should_receive("get").and_return(requests.Response()) @@ -2376,7 +2388,7 @@ def test_copr_build_start_already_ended(copr_build_start, pc_build_pr, copr_buil processing_results = SteveJobs().process_message(copr_build_start) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -2390,20 +2402,20 @@ def test_copr_build_start_already_ended(copr_build_start, pc_build_pr, copr_buil def test_copr_build_not_comment_on_success(copr_build_end, pc_build_pr, copr_build_pr): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_pr").and_return( - flexmock(source_project=flexmock()).should_receive("comment").never() + flexmock(source_project=flexmock()).should_receive("comment").never(), ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - pc_build_pr + pc_build_pr, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(CoprBuildJobHelper).should_receive("get_build_check").and_return( - EXPECTED_BUILD_CHECK_NAME + EXPECTED_BUILD_CHECK_NAME, ) flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_pr + copr_build_pr, ) copr_build_pr.should_call("set_status").with_args(BuildStatus.success).once() copr_build_pr.should_receive("set_end_time").once() @@ -2442,7 +2454,7 @@ def test_copr_build_not_comment_on_success(copr_build_end, pc_build_pr, copr_bui processing_results = SteveJobs().process_message(copr_build_end) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -2457,11 +2469,11 @@ def test_koji_build_start(koji_build_scratch_start, pc_koji_build_pr, koji_build koji_build_pr.target = "rawhide" flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(KojiTaskEvent).should_receive("get_packages_config").and_return( - pc_koji_build_pr + pc_koji_build_pr, ) flexmock(KojiBuildTargetModel).should_receive("get_by_task_id").and_return( - koji_build_pr + koji_build_pr, ) url = get_koji_build_info_url(1) flexmock(requests).should_receive("get").and_return(requests.Response()) @@ -2488,7 +2500,7 @@ def test_koji_build_start(koji_build_scratch_start, pc_koji_build_pr, koji_build processing_results = SteveJobs().process_message(koji_build_scratch_start) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -2522,11 +2534,11 @@ def test_koji_build_end(koji_build_scratch_end, pc_koji_build_pr, koji_build_pr) koji_build_pr.target = "rawhide" flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(KojiTaskEvent).should_receive("get_packages_config").and_return( - pc_koji_build_pr + pc_koji_build_pr, ) flexmock(KojiBuildTargetModel).should_receive("get_by_task_id").and_return( - koji_build_pr + koji_build_pr, ) url = get_koji_build_info_url(1) flexmock(requests).should_receive("get").and_return(requests.Response()) @@ -2553,7 +2565,7 @@ def test_koji_build_end(koji_build_scratch_end, pc_koji_build_pr, koji_build_pr) processing_results = SteveJobs().process_message(koji_build_scratch_end) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -2567,37 +2579,39 @@ def test_koji_build_end(koji_build_scratch_end, pc_koji_build_pr, koji_build_pr) def test_koji_build_tag( - koji_build_tagged, pc_koji_build_tag_specfile, pc_koji_build_tag_packit + koji_build_tagged, + pc_koji_build_tag_specfile, + pc_koji_build_tag_packit, ): flexmock(KojiHelper).should_receive("get_build_info").with_args(1234567).and_return( - {"task_id": 7654321} + {"task_id": 7654321}, ) flexmock(KojiBuildTagEvent).should_receive("get_packages_config").and_return( - pc_koji_build_tag_specfile + pc_koji_build_tag_specfile, ) flexmock(SidetagModel).should_receive("get_by_koji_name").with_args( - "f40-build-side-12345" + "f40-build-side-12345", ).and_return( flexmock( sidetag_group=flexmock(name="test"), target="f40", koji_name="f40-build-side-12345", - ) + ), ) flexmock(KojiHelper).should_receive("get_tag_info").with_args( - "f40-build-side-12345" + "f40-build-side-12345", ).and_return({"name": "f40-build-side-12345"}) flexmock(KojiHelper).should_receive("get_builds_in_tag").with_args( - "f40-build-side-12345" + "f40-build-side-12345", ).and_return( - [{"package_name": "python-specfile", "nvr": "python-specfile-0.32.0-1.fc40"}] + [{"package_name": "python-specfile", "nvr": "python-specfile-0.32.0-1.fc40"}], ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(pc_koji_build_tag_specfile).and_return(pc_koji_build_tag_packit) flexmock(DownstreamKojiBuildHandler).should_receive("pre_check").and_return(True) @@ -2608,7 +2622,7 @@ def test_koji_build_tag( processing_results = SteveJobs().process_message(koji_build_tagged) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -2626,18 +2640,18 @@ def test_srpm_build_end(srpm_build_end, pc_build_pr, srpm_build_model): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_pr").and_return(pr) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - pc_build_pr + pc_build_pr, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(CoprBuildTargetModel).should_receive("get_all_by_build_id").and_return( [ flexmock(target="fedora-33-x86_64") .should_receive("set_status") .with_args(BuildStatus.pending) - .mock() - ] + .mock(), + ], ) ( flexmock(CoprBuildJobHelper) @@ -2650,7 +2664,7 @@ def test_srpm_build_end(srpm_build_end, pc_build_pr, srpm_build_model): flexmock(Pushgateway).should_receive("push").times(2).and_return() flexmock(SRPMBuildModel).should_receive("get_by_copr_build_id").and_return( - srpm_build_model + srpm_build_model, ) srpm_build_model.should_call("set_status").with_args(BuildStatus.success).once() srpm_build_model.should_receive("set_end_time").once() @@ -2670,12 +2684,12 @@ def test_srpm_build_end(srpm_build_end, pc_build_pr, srpm_build_model): flexmock(celery_group).should_receive("apply_async").once() flexmock(srpm_build_model).should_receive("set_url").with_args( - "https://my.host/my.srpm" + "https://my.host/my.srpm", ).mock() processing_results = SteveJobs().process_message(srpm_build_end) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -2694,13 +2708,13 @@ def test_srpm_build_end_failure(srpm_build_end, pc_build_pr, srpm_build_model): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_pr").and_return(pr) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - pc_build_pr + pc_build_pr, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(CoprBuildTargetModel).should_receive("get_all_by_build_id").and_return( - [flexmock(target="fedora-33-x86_64")] + [flexmock(target="fedora-33-x86_64")], ) ( flexmock(CoprBuildJobHelper) @@ -2714,7 +2728,7 @@ def test_srpm_build_end_failure(srpm_build_end, pc_build_pr, srpm_build_model): flexmock(CoprBuildJobHelper).should_receive("monitor_not_submitted_copr_builds") flexmock(SRPMBuildModel).should_receive("get_by_copr_build_id").and_return( - srpm_build_model + srpm_build_model, ) srpm_build_model.should_call("set_status").with_args(BuildStatus.failure).once() srpm_build_model.should_receive("set_end_time").once() @@ -2734,12 +2748,12 @@ def test_srpm_build_end_failure(srpm_build_end, pc_build_pr, srpm_build_model): flexmock(celery_group).should_receive("apply_async").once() flexmock(srpm_build_model).should_receive("set_url").with_args( - "https://my.host/my.srpm" + "https://my.host/my.srpm", ).mock() processing_results = SteveJobs().process_message(srpm_build_end) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -2757,18 +2771,18 @@ def test_srpm_build_start(srpm_build_start, pc_build_pr, srpm_build_model): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_pr").and_return(pr) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( - pc_build_pr + pc_build_pr, ) flexmock(CoprHelper).should_receive("get_copr_client").and_return( - Client(config={"username": "packit", "copr_url": "https://dummy.url"}) + Client(config={"username": "packit", "copr_url": "https://dummy.url"}), ) flexmock(CoprBuildTargetModel).should_receive("get_all_by_build_id").and_return( - [flexmock(target="fedora-33-x86_64")] + [flexmock(target="fedora-33-x86_64")], ) flexmock(Pushgateway).should_receive("push").times(2).and_return() flexmock(SRPMBuildModel).should_receive("get_by_copr_build_id").and_return( - srpm_build_model + srpm_build_model, ) srpm_build_model.should_receive("get_package_name").and_return(None) flexmock(SRPMBuildModel).should_receive("set_start_time") @@ -2789,7 +2803,7 @@ def test_srpm_build_start(srpm_build_start, pc_build_pr, srpm_build_model): processing_results = SteveJobs().process_message(srpm_build_start) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) diff --git a/tests/integration/test_new_hotness_update.py b/tests/integration/test_new_hotness_update.py index 18b94b696..a68311709 100644 --- a/tests/integration/test_new_hotness_update.py +++ b/tests/integration/test_new_hotness_update.py @@ -59,7 +59,9 @@ def sync_release_model(): ) run_model = flexmock(PipelineModel) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.release, event_id=12, commit_sha=None + type=ProjectEventModelType.release, + event_id=12, + commit_sha=None, ).and_return(project_event) flexmock(ProjectReleaseModel).should_receive("get_or_create").with_args( tag_name="7.0.3", @@ -98,7 +100,9 @@ class AnityaTestProjectModel(AnityaProjectModel): ) run_model = flexmock(PipelineModel) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.release, event_id=12, commit_sha=None + type=ProjectEventModelType.release, + event_id=12, + commit_sha=None, ).and_return(project_event) flexmock(AnityaVersionModel).should_receive("get_or_create").with_args( version="7.0.3", @@ -124,7 +128,8 @@ def sync_release_target_models(fedora_branches): model = flexmock(status="queued", id=1234, branch=branch) models.append(model) flexmock(SyncReleaseTargetModel).should_receive("create").with_args( - status=SyncReleaseTargetStatus.queued, branch=branch + status=SyncReleaseTargetStatus.queued, + branch=branch, ).and_return(model) yield models @@ -132,7 +137,8 @@ def sync_release_target_models(fedora_branches): def test_new_hotness_update(new_hotness_update, sync_release_model): model = flexmock(status="queued", id=1234, branch="main") flexmock(SyncReleaseTargetModel).should_receive("create").with_args( - status=SyncReleaseTargetStatus.queued, branch="main" + status=SyncReleaseTargetStatus.queued, + branch="main", ).and_return(model) flexmock(SyncReleasePullRequestModel).should_receive("get_or_create").with_args( pr_id=21, @@ -179,14 +185,14 @@ def test_new_hotness_update(new_hotness_update, sync_release_model): .once() .mock(), git=flexmock(clear_cache=lambda: None), - ) + ), ) flexmock(Allowlist, check_and_report=True) service_config = ServiceConfig().get_service_config() flexmock(service_config).should_receive("get_project").with_args( - "https://src.fedoraproject.org/rpms/redis" + "https://src.fedoraproject.org/rpms/redis", ).and_return(distgit_project) flexmock(service_config).should_receive("get_project").with_args( "https://github.com/packit-service/hello-world", @@ -228,22 +234,22 @@ def test_new_hotness_update(new_hotness_update, sync_release_model): flexmock(PackitAPI).should_receive("clean") flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.running + status=SyncReleaseTargetStatus.running, ).once() flexmock(model).should_receive("set_downstream_pr_url").with_args( - downstream_pr_url="some_url" + downstream_pr_url="some_url", ) flexmock(model).should_receive("set_downstream_pr").with_args( - downstream_pr=object + downstream_pr=object, ).once() flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.submitted + status=SyncReleaseTargetStatus.submitted, ).once() flexmock(model).should_receive("set_start_time").once() flexmock(model).should_receive("set_finished_time").once() flexmock(model).should_receive("set_logs").once() flexmock(sync_release_model).should_receive("set_status").with_args( - status=SyncReleaseStatus.finished + status=SyncReleaseStatus.finished, ).once() sync_release_model.should_receive("get_package_name").and_return(None) @@ -252,7 +258,7 @@ def test_new_hotness_update(new_hotness_update, sync_release_model): job_config_trigger_type=JobConfigTriggerType.release, id=123, project_event_model_type=ProjectEventModelType.release, - ) + ), ) flexmock(group).should_receive("apply_async").once() flexmock(Pushgateway).should_receive("push").times(2).and_return() @@ -260,7 +266,7 @@ def test_new_hotness_update(new_hotness_update, sync_release_model): processing_results = SteveJobs().process_message(new_hotness_update) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -295,7 +301,7 @@ def test_new_hotness_update_pre_check_fail(new_hotness_update): flexmock(Pushgateway).should_receive("push").times(1).and_return() service_config = ServiceConfig().get_service_config() flexmock(service_config).should_receive("get_project").with_args( - "https://src.fedoraproject.org/rpms/redis" + "https://src.fedoraproject.org/rpms/redis", ).and_return(distgit_project) msg = ( @@ -303,7 +309,7 @@ def test_new_hotness_update_pre_check_fail(new_hotness_update): "the upstream_project_url 'https://github.com/packit-service' defined in the config." ) flexmock(packit_service.worker.checker.distgit).should_receive( - "report_in_issue_repository" + "report_in_issue_repository", ).with_args( issue_repository="https://github.com/packit/issue_repository", service_config=service_config, @@ -318,7 +324,8 @@ def test_new_hotness_update_pre_check_fail(new_hotness_update): def test_new_hotness_update_non_git(new_hotness_update, sync_release_model_non_git): model = flexmock(status="queued", id=1234, branch="main") flexmock(SyncReleaseTargetModel).should_receive("create").with_args( - status=SyncReleaseTargetStatus.queued, branch="main" + status=SyncReleaseTargetStatus.queued, + branch="main", ).and_return(model) flexmock(SyncReleasePullRequestModel).should_receive("get_or_create").with_args( pr_id=21, @@ -361,10 +368,11 @@ def test_new_hotness_update_non_git(new_hotness_update, sync_release_model_non_g service_config = ServiceConfig().get_service_config() flexmock(service_config).should_receive("get_project").with_args( - "https://src.fedoraproject.org/rpms/redis", required=False + "https://src.fedoraproject.org/rpms/redis", + required=False, ).and_return(distgit_project) flexmock(service_config).should_receive("get_project").with_args( - "https://src.fedoraproject.org/rpms/redis" + "https://src.fedoraproject.org/rpms/redis", ).and_return(distgit_project) target_project = ( @@ -402,22 +410,22 @@ def test_new_hotness_update_non_git(new_hotness_update, sync_release_model_non_g flexmock(PackitAPI).should_receive("clean") flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.running + status=SyncReleaseTargetStatus.running, ).once() flexmock(model).should_receive("set_downstream_pr_url").with_args( - downstream_pr_url="some_url" + downstream_pr_url="some_url", ) flexmock(model).should_receive("set_downstream_pr").with_args( - downstream_pr=object + downstream_pr=object, ).once() flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.submitted + status=SyncReleaseTargetStatus.submitted, ).once() flexmock(model).should_receive("set_start_time").once() flexmock(model).should_receive("set_finished_time").once() flexmock(model).should_receive("set_logs").once() flexmock(sync_release_model_non_git).should_receive("set_status").with_args( - status=SyncReleaseStatus.finished + status=SyncReleaseStatus.finished, ).once() sync_release_model_non_git.should_receive("get_package_name").and_return(None) @@ -426,7 +434,7 @@ def test_new_hotness_update_non_git(new_hotness_update, sync_release_model_non_g job_config_trigger_type=JobConfigTriggerType.release, id=123, project_event_model_type=ProjectEventModelType.release, - ) + ), ) flexmock(group).should_receive("apply_async").once() flexmock(Pushgateway).should_receive("push").times(2).and_return() @@ -434,7 +442,7 @@ def test_new_hotness_update_non_git(new_hotness_update, sync_release_model_non_g processing_results = SteveJobs().process_message(new_hotness_update) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) diff --git a/tests/integration/test_pr_comment.py b/tests/integration/test_pr_comment.py index 52a7bd49b..14d41818d 100644 --- a/tests/integration/test_pr_comment.py +++ b/tests/integration/test_pr_comment.py @@ -99,14 +99,14 @@ @pytest.fixture(scope="module") def pr_copr_build_comment_event(): return json.loads( - (DATA_DIR / "webhooks" / "github" / "pr_comment_copr_build.json").read_text() + (DATA_DIR / "webhooks" / "github" / "pr_comment_copr_build.json").read_text(), ) @pytest.fixture(scope="module") def pr_build_comment_event(): return json.loads( - (DATA_DIR / "webhooks" / "github" / "pr_comment_build.json").read_text() + (DATA_DIR / "webhooks" / "github" / "pr_comment_build.json").read_text(), ) @@ -115,7 +115,7 @@ def pr_production_build_comment_event(): return json.loads( ( DATA_DIR / "webhooks" / "github" / "pr_comment_production_build.json" - ).read_text() + ).read_text(), ) @@ -124,14 +124,14 @@ def pr_embedded_command_comment_event(): return json.loads( ( DATA_DIR / "webhooks" / "github" / "pr_comment_embedded_command.json" - ).read_text() + ).read_text(), ) @pytest.fixture(scope="module") def pr_empty_comment_event(): return json.loads( - (DATA_DIR / "webhooks" / "github" / "pr_comment_empty.json").read_text() + (DATA_DIR / "webhooks" / "github" / "pr_comment_empty.json").read_text(), ) @@ -143,7 +143,7 @@ def pr_packit_comment_command_without_argument_event(): / "webhooks" / "github" / "issue_comment_packit_command_without_argument.json" - ).read_text() + ).read_text(), ) @@ -152,7 +152,7 @@ def pr_wrong_packit_comment_event(): return json.loads( ( DATA_DIR / "webhooks" / "github" / "issue_comment_wrong_packit_command.json" - ).read_text() + ).read_text(), ) @@ -172,7 +172,8 @@ def mock_pr_comment_functionality(request): get_web_url=lambda: "https://github.com/the-namespace/the-repo", ) flexmock( - GithubProject, get_files=lambda ref, recursive: ["foo.spec", "packit.yaml"] + GithubProject, + get_files=lambda ref, recursive: ["foo.spec", "packit.yaml"], ) flexmock(Github, get_repo=lambda full_name_or_id: None) db_project_object = flexmock( @@ -189,7 +190,9 @@ def mock_pr_comment_functionality(request): .mock() ) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.pull_request, event_id=9, commit_sha="12345" + type=ProjectEventModelType.pull_request, + event_id=9, + commit_sha="12345", ).and_return(db_project_event) flexmock(PullRequestModel).should_receive("get_or_create").with_args( pr_id=9, @@ -221,13 +224,14 @@ def one_job_finished_with_msg(results: List[TaskResults], msg: str): "job": "tests", "metadata": {"targets": "fedora-rawhide-x86_64"}, }, - ] + ], ] ), indirect=True, ) def test_pr_comment_build_test_handler( - mock_pr_comment_functionality, pr_build_comment_event + mock_pr_comment_functionality, + pr_build_comment_event, ): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return(set()) @@ -267,13 +271,14 @@ def test_pr_comment_build_test_handler( "job": "tests", "metadata": {"targets": "fedora-rawhide-x86_64"}, }, - ] + ], ] ), indirect=True, ) def test_pr_comment_build_build_and_test_handler( - mock_pr_comment_functionality, pr_build_comment_event + mock_pr_comment_functionality, + pr_build_comment_event, ): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return(set()) @@ -294,7 +299,7 @@ def test_pr_comment_build_build_and_test_handler( update_feedback_time=object, ).once() flexmock(CoprBuildJobHelper).should_receive( - "is_custom_copr_project_defined" + "is_custom_copr_project_defined", ).and_return(False).once() flexmock(celery_group).should_receive("apply_async").twice() flexmock(Pushgateway).should_receive("push").times(4).and_return() @@ -344,13 +349,14 @@ def test_pr_comment_build_build_and_test_handler( "manual_trigger": True, "metadata": {"targets": "fedora-rawhide-x86_64"}, }, - ] + ], ] ), indirect=True, ) def test_pr_comment_build_build_and_test_handler_manual_test_reporting( - mock_pr_comment_functionality, pr_build_comment_event + mock_pr_comment_functionality, + pr_build_comment_event, ): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return(set()) @@ -372,7 +378,7 @@ def test_pr_comment_build_build_and_test_handler_manual_test_reporting( update_feedback_time=object, ).never() flexmock(CoprBuildJobHelper).should_receive( - "is_custom_copr_project_defined" + "is_custom_copr_project_defined", ).and_return(False).once() flexmock(celery_group).should_receive("apply_async").twice() flexmock(Pushgateway).should_receive("push").times(4).and_return() @@ -415,9 +421,9 @@ def test_pr_comment_production_build_handler(pr_production_build_comment_event): "trigger": "pull_request", "job": "upstream_koji_build", "metadata": {"targets": "fedora-rawhide-x86_64", "scratch": "true"}, - } + }, ], - } + }, ) comment = flexmock(add_reaction=lambda reaction: None) flexmock( @@ -427,7 +433,8 @@ def test_pr_comment_production_build_handler(pr_production_build_comment_event): get_files=lambda ref, filter_regex: ["the-specfile.spec"], get_web_url=lambda: "https://github.com/the-namespace/the-repo", get_pr=lambda pr_id: flexmock( - head_commit="12345", get_comment=lambda comment_id: comment + head_commit="12345", + get_comment=lambda comment_id: comment, ), ) flexmock(Github, get_repo=lambda full_name_or_id: None) @@ -446,13 +453,15 @@ def test_pr_comment_production_build_handler(pr_production_build_comment_event): .mock() ) flexmock(PullRequestModel).should_receive("get_by_id").with_args(9).and_return( - project_event + project_event, ) flexmock(LocalProject, refresh_the_arguments=lambda: None) flexmock(Allowlist, check_and_report=True) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.pull_request, event_id=9, commit_sha="12345" + type=ProjectEventModelType.pull_request, + event_id=9, + commit_sha="12345", ).and_return(project_event) flexmock(PullRequestModel).should_receive("get_or_create").with_args( pr_id=9, @@ -461,10 +470,11 @@ def test_pr_comment_production_build_handler(pr_production_build_comment_event): project_url="https://github.com/packit-service/hello-world", ).and_return(db_project_object) flexmock(KojiBuildJobHelper).should_receive("run_koji_build").and_return( - TaskResults(success=True, details={}) + TaskResults(success=True, details={}), ) flexmock( - GithubProject, get_files=lambda ref, recursive: ["foo.spec", "packit.yaml"] + GithubProject, + get_files=lambda ref, recursive: ["foo.spec", "packit.yaml"], ) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(KojiBuildJobHelper).should_receive("report_status_to_build").with_args( @@ -485,7 +495,7 @@ def test_pr_comment_production_build_handler(pr_production_build_comment_event): processing_results = SteveJobs().process_message(pr_production_build_comment_event) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -517,7 +527,8 @@ def test_pr_comment_production_build_handler(pr_production_build_comment_event): ) def test_pr_comment_invalid(comment): commands = get_packit_commands_from_comment( - comment, packit_comment_command_prefix="/packit" + comment, + packit_comment_command_prefix="/packit", ) assert len(commands) == 0 @@ -535,7 +546,8 @@ def test_pr_comment_invalid(comment): ) def test_pr_comment_invalid_with_command_set(comment, command): commands = get_packit_commands_from_comment( - comment, packit_comment_command_prefix=command + comment, + packit_comment_command_prefix=command, ) assert len(commands) == 0 @@ -549,17 +561,19 @@ def test_pr_comment_invalid_with_command_set(comment, command): "trigger": "pull_request", "job": "copr_build", "metadata": {"targets": "fedora-rawhide-x86_64"}, - } - ] + }, + ], ] ), indirect=True, ) def test_pr_comment_empty_handler( - mock_pr_comment_functionality, pr_empty_comment_event + mock_pr_comment_functionality, + pr_empty_comment_event, ): flexmock( - GithubProject, get_files=lambda ref, recursive: ["foo.spec", "packit.yaml"] + GithubProject, + get_files=lambda ref, recursive: ["foo.spec", "packit.yaml"], ) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("can_merge_pr").and_return(True) @@ -581,14 +595,15 @@ def test_pr_comment_empty_handler( "trigger": "pull_request", "job": "copr_build", "metadata": {"targets": "fedora-rawhide-x86_64"}, - } - ] + }, + ], ] ), indirect=True, ) def test_pr_comment_packit_only_handler( - mock_pr_comment_functionality, pr_packit_comment_command_without_argument_event + mock_pr_comment_functionality, + pr_packit_comment_command_without_argument_event, ): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("can_merge_pr").and_return(True) @@ -597,7 +612,7 @@ def test_pr_comment_packit_only_handler( flexmock(Pushgateway).should_receive("push").times(1).and_return() results = SteveJobs().process_message( - pr_packit_comment_command_without_argument_event + pr_packit_comment_command_without_argument_event, )[0] assert results["success"] assert results["details"]["msg"] == "No Packit command found in the comment." @@ -614,14 +629,15 @@ def test_pr_comment_packit_only_handler( "targets": [ "fedora-rawhide-x86_64", ], - } - ] + }, + ], ] ), indirect=True, ) def test_pr_comment_wrong_packit_command_handler( - mock_pr_comment_functionality, pr_wrong_packit_comment_event + mock_pr_comment_functionality, + pr_wrong_packit_comment_event, ): flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("can_merge_pr").and_return(True) @@ -635,7 +651,8 @@ def test_pr_comment_wrong_packit_command_handler( def test_pr_test_command_handler( - add_pull_request_event_with_pr_id_9, pr_embedded_command_comment_event + add_pull_request_event_with_pr_id_9, + pr_embedded_command_comment_event, ): jobs = [ { @@ -679,7 +696,7 @@ def test_pr_test_command_handler( flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(celery_group).should_receive("apply_async").once() flexmock(CoprHelper).should_receive("get_valid_build_targets").times(5).and_return( - {"test-target"} + {"test-target"}, ) run = flexmock(test_run_group=None) test_run = flexmock( @@ -691,13 +708,13 @@ def test_pr_test_command_handler( flexmock(PipelineModel).should_receive("create").and_return(run) flexmock(TFTTestRunTargetModel).should_receive("create").and_return(test_run) flexmock(TFTTestRunGroupModel).should_receive("create").with_args([run]).and_return( - flexmock(grouped_targets=[test_run]) + flexmock(grouped_targets=[test_run]), ) flexmock(TestingFarmJobHelper).should_receive("get_latest_copr_build").and_return( - flexmock(status=BuildStatus.success, group_of_targets=flexmock(runs=[run])) + flexmock(status=BuildStatus.success, group_of_targets=flexmock(runs=[run])), ) flexmock(TestingFarmJobHelper).should_receive("run_testing_farm").once().and_return( - TaskResults(success=True, details={}) + TaskResults(success=True, details={}), ) flexmock(Pushgateway).should_receive("push").times(3).and_return() flexmock(TestingFarmJobHelper).should_receive("report_status_to_tests").with_args( @@ -711,7 +728,7 @@ def test_pr_test_command_handler( processing_results = SteveJobs().process_message(pr_embedded_command_comment_event) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -723,7 +740,8 @@ def test_pr_test_command_handler( def test_pr_test_command_handler_identifiers( - add_pull_request_event_with_pr_id_9, pr_embedded_command_comment_event + add_pull_request_event_with_pr_id_9, + pr_embedded_command_comment_event, ): jobs = [ { @@ -767,7 +785,7 @@ def test_pr_test_command_handler_identifiers( flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(celery_group).should_receive("apply_async").once() flexmock(CoprHelper).should_receive("get_valid_build_targets").times(5).and_return( - {"test-target"} + {"test-target"}, ) run = flexmock(test_run_group=None) test_run = flexmock( @@ -779,7 +797,7 @@ def test_pr_test_command_handler_identifiers( flexmock(PipelineModel).should_receive("create").and_return(run) flexmock(TFTTestRunTargetModel).should_receive("create").and_return(test_run) flexmock(TFTTestRunGroupModel).should_receive("create").with_args([run]).and_return( - flexmock(grouped_targets=[test_run]) + flexmock(grouped_targets=[test_run]), ) flexmock(CoprBuildTargetModel).should_receive("get_all_by").with_args( project_name="packit-service-hello-world-9", @@ -787,10 +805,10 @@ def test_pr_test_command_handler_identifiers( owner=None, target="test-target", ).and_return( - [flexmock(status=BuildStatus.success, group_of_targets=flexmock(runs=[run]))] + [flexmock(status=BuildStatus.success, group_of_targets=flexmock(runs=[run]))], ) flexmock(TestingFarmJobHelper).should_receive("run_testing_farm").once().and_return( - TaskResults(success=True, details={}) + TaskResults(success=True, details={}), ) flexmock(Pushgateway).should_receive("push").times(3).and_return() flexmock(TestingFarmJobHelper).should_receive("report_status_to_tests").with_args( @@ -804,7 +822,7 @@ def test_pr_test_command_handler_identifiers( processing_results = SteveJobs().process_message(pr_embedded_command_comment_event) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -903,7 +921,7 @@ def test_pr_test_command_handler_retries( "trigger": "pull_request", "job": "tests", "metadata": {"targets": "fedora-rawhide-x86_64", "skip_build": True}, - } + }, ] packit_yaml = ( "{'specfile_path': 'the-specfile.spec', 'synced_files': [], 'jobs': " @@ -913,10 +931,10 @@ def test_pr_test_command_handler_retries( _ = add_pull_request_event_with_sha_0011223344 pr = flexmock( source_project=flexmock( - get_web_url=lambda: "https://github.com/someone/hello-world" + get_web_url=lambda: "https://github.com/someone/hello-world", ), target_project=flexmock( - get_web_url=lambda: "https://github.com/packit-service/hello-world" + get_web_url=lambda: "https://github.com/packit-service/hello-world", ), head_commit="0011223344", target_branch_head_commit="deadbeef", @@ -951,7 +969,7 @@ def test_pr_test_command_handler_retries( ) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( - {"fedora-rawhide-x86_64"} + {"fedora-rawhide-x86_64"}, ) flexmock(TestingFarmJobHelper).should_receive("get_latest_copr_build").never() flexmock(Pushgateway).should_receive("push").times(4).and_return() @@ -964,7 +982,7 @@ def test_pr_test_command_handler_retries( "ref": "0011223344", "merge_sha": "deadbeef", "path": ".", - } + }, }, "environments": [ { @@ -976,7 +994,7 @@ def test_pr_test_command_handler_retries( "arch": "x86_64", "trigger": "commit", "initiator": "packit", - } + }, }, "variables": { "PACKIT_FULL_REPO_NAME": "packit-service/hello-world", @@ -993,23 +1011,23 @@ def test_pr_test_command_handler_retries( "PACKIT_TARGET_URL": "https://github.com/packit-service/hello-world", "PACKIT_PR_ID": 9, }, - } + }, ], "notification": { "webhook": { "url": "https://prod.packit.dev/api/testing-farm/results", "token": "secret-token", - } + }, }, } flexmock(TestingFarmJobHelper).should_receive("is_fmf_configured").and_return(True) flexmock(TestingFarmJobHelper).should_receive("distro2compose").and_return( - "Fedora-Rawhide" + "Fedora-Rawhide", ) flexmock(TestingFarmJobHelper).should_receive( - "send_testing_farm_request" + "send_testing_farm_request", ).with_args(endpoint="requests", method="POST", data=payload).and_return(response) flexmock(StatusReporterGithubChecks).should_receive("set_status").with_args( @@ -1031,12 +1049,14 @@ def test_pr_test_command_handler_retries( ).once() flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/packit-service/hello-world" + "https://github.com/packit-service/hello-world", ) # On first run, we create the model, afterwards, we should get it from the DB test_run = flexmock( - id=1, target="fedora-rawhide-x86_64", status=TestingFarmResult.new + id=1, + target="fedora-rawhide-x86_64", + status=TestingFarmResult.new, ) group = flexmock(id=1, grouped_targets=[test_run]) test_run.group_of_targets = group @@ -1047,18 +1067,18 @@ def test_pr_test_command_handler_retries( flexmock(TFTTestRunTargetModel).should_receive("get_by_id").and_return(test_run) else: flexmock(PipelineModel).should_receive("create").and_return( - flexmock(test_run_group=None) + flexmock(test_run_group=None), ) flexmock(TFTTestRunGroupModel).should_receive("create").and_return(group) flexmock(TFTTestRunTargetModel).should_receive("create").and_return(test_run) if retry_number == 2: flexmock(test_run).should_receive("set_status").with_args( - TestingFarmResult.error + TestingFarmResult.error, ) else: flexmock(test_run).should_receive("set_status").with_args( - TestingFarmResult.retry + TestingFarmResult.retry, ) flexmock(StatusReporterGithubChecks).should_receive("set_status").with_args( @@ -1073,12 +1093,13 @@ def test_pr_test_command_handler_retries( processing_results = SteveJobs().process_message(pr_embedded_command_comment_event) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) if delay is not None: flexmock(CeleryTask).should_receive("retry").with_args( - delay=delay, kargs={"testing_farm_target_id": test_run.id} + delay=delay, + kargs={"testing_farm_target_id": test_run.id}, ).once() assert json.dumps(event_dict) @@ -1096,7 +1117,8 @@ def test_pr_test_command_handler_retries( def test_pr_test_command_handler_skip_build_option( - add_pull_request_event_with_sha_0011223344, pr_embedded_command_comment_event + add_pull_request_event_with_sha_0011223344, + pr_embedded_command_comment_event, ): _ = add_pull_request_event_with_sha_0011223344 jobs = [ @@ -1104,7 +1126,7 @@ def test_pr_test_command_handler_skip_build_option( "trigger": "pull_request", "job": "tests", "metadata": {"targets": "fedora-rawhide-x86_64", "skip_build": True}, - } + }, ] packit_yaml = ( "{'specfile_path': 'the-specfile.spec', 'synced_files': [], 'jobs': " @@ -1113,10 +1135,10 @@ def test_pr_test_command_handler_skip_build_option( ) pr = flexmock( source_project=flexmock( - get_web_url=lambda: "https://github.com/someone/hello-world" + get_web_url=lambda: "https://github.com/someone/hello-world", ), target_project=flexmock( - get_web_url=lambda: "https://github.com/packit-service/hello-world" + get_web_url=lambda: "https://github.com/packit-service/hello-world", ), head_commit="0011223344", target_branch_head_commit="deadbeef", @@ -1145,11 +1167,12 @@ def test_pr_test_command_handler_skip_build_option( flexmock(Allowlist, check_and_report=True) pr_embedded_command_comment_event["comment"]["body"] = "/packit test" flexmock( - GithubProject, get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"] + GithubProject, + get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"], ) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( - {"fedora-rawhide-x86_64"} + {"fedora-rawhide-x86_64"}, ) flexmock(TestingFarmJobHelper).should_receive("get_latest_copr_build").never() flexmock(Pushgateway).should_receive("push").times(3).and_return() @@ -1170,7 +1193,7 @@ def test_pr_test_command_handler_skip_build_option( "ref": "0011223344", "merge_sha": "deadbeef", "path": ".", - } + }, }, "environments": [ { @@ -1182,7 +1205,7 @@ def test_pr_test_command_handler_skip_build_option( "arch": "x86_64", "trigger": "commit", "initiator": "packit", - } + }, }, "variables": { "PACKIT_FULL_REPO_NAME": "packit-service/hello-world", @@ -1199,31 +1222,31 @@ def test_pr_test_command_handler_skip_build_option( "PACKIT_TARGET_URL": "https://github.com/packit-service/hello-world", "PACKIT_PR_ID": 9, }, - } + }, ], "notification": { "webhook": { "url": "https://prod.packit.dev/api/testing-farm/results", "token": "secret-token", - } + }, }, } flexmock(TestingFarmJobHelper).should_receive("is_fmf_configured").and_return(True) flexmock(TestingFarmJobHelper).should_receive("distro2compose").and_return( - "Fedora-Rawhide" + "Fedora-Rawhide", ) pipeline_id = "5e8079d8-f181-41cf-af96-28e99774eb68" flexmock(TestingFarmJobHelper).should_receive( - "send_testing_farm_request" + "send_testing_farm_request", ).with_args(endpoint="requests", method="POST", data=payload).and_return( RequestResponse( status_code=200, ok=True, content=json.dumps({"id": pipeline_id}).encode(), json={"id": pipeline_id}, - ) + ), ) flexmock(StatusReporter).should_receive("report").with_args( @@ -1237,17 +1260,19 @@ def test_pr_test_command_handler_skip_build_option( ).once() flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/packit-service/hello-world" + "https://github.com/packit-service/hello-world", ) tft_test_run_model = flexmock( - id=5, status=TestingFarmResult.new, target="fedora-rawhide-x86_64" + id=5, + status=TestingFarmResult.new, + target="fedora-rawhide-x86_64", ) run_model = flexmock(test_run_group=None) flexmock(PipelineModel).should_receive("create").and_return(run_model) group = flexmock(grouped_targets=[tft_test_run_model]) flexmock(TFTTestRunGroupModel).should_receive("create").with_args( - [run_model] + [run_model], ).and_return(group) flexmock(TFTTestRunTargetModel).should_receive("create").with_args( pipeline_id=None, @@ -1260,7 +1285,7 @@ def test_pr_test_command_handler_skip_build_option( data={"base_project_url": "https://github.com/packit-service/hello-world"}, ).and_return(tft_test_run_model) flexmock(tft_test_run_model).should_receive("set_pipeline_id").with_args( - pipeline_id + pipeline_id, ).once() urls.DASHBOARD_URL = "https://dashboard.localhost" @@ -1277,7 +1302,7 @@ def test_pr_test_command_handler_skip_build_option( processing_results = SteveJobs().process_message(pr_embedded_command_comment_event) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -1297,7 +1322,7 @@ def test_pr_test_command_handler_compose_not_present( "trigger": "pull_request", "job": "tests", "metadata": {"targets": "fedora-rawhide-x86_64", "skip_build": True}, - } + }, ] packit_yaml = ( "{'specfile_path': 'the-specfile.spec', 'synced_files': [], 'jobs': " @@ -1307,10 +1332,10 @@ def test_pr_test_command_handler_compose_not_present( _ = add_pull_request_event_with_sha_0011223344 pr = flexmock( source_project=flexmock( - get_web_url=lambda: "https://github.com/someone/hello-world" + get_web_url=lambda: "https://github.com/someone/hello-world", ), target_project=flexmock( - get_web_url=lambda: "https://github.com/packit-service/hello-world" + get_web_url=lambda: "https://github.com/packit-service/hello-world", ), head_commit="0011223344", target_branch_head_commit="deadbeef", @@ -1345,17 +1370,18 @@ def test_pr_test_command_handler_compose_not_present( flexmock(PipelineModel).should_receive("create").and_return(run_model) flexmock(TFTTestRunTargetModel).should_receive("create").and_return(test_run) flexmock(TFTTestRunGroupModel).should_receive("create").with_args( - [run_model] + [run_model], ).and_return(flexmock(grouped_targets=[test_run])) flexmock(LocalProject, refresh_the_arguments=lambda: None) flexmock(Allowlist, check_and_report=True) pr_embedded_command_comment_event["comment"]["body"] = "/packit test" flexmock( - GithubProject, get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"] + GithubProject, + get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"], ) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( - {"fedora-rawhide-x86_64"} + {"fedora-rawhide-x86_64"}, ) flexmock(TestingFarmJobHelper).should_receive("get_latest_copr_build").never() flexmock(Pushgateway).should_receive("push").times(3).and_return() @@ -1381,10 +1407,11 @@ def test_pr_test_command_handler_compose_not_present( ).once() response = flexmock( - status_code=200, json=lambda: {"composes": [{"name": "some-other-compose"}]} + status_code=200, + json=lambda: {"composes": [{"name": "some-other-compose"}]}, ) flexmock(TestingFarmJobHelper).should_receive( - "send_testing_farm_request" + "send_testing_farm_request", ).with_args(endpoint="composes/public").and_return(response).once() flexmock(StatusReporter).should_receive("report").with_args( @@ -1406,7 +1433,7 @@ def test_pr_test_command_handler_compose_not_present( processing_results = SteveJobs().process_message(pr_embedded_command_comment_event) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -1426,7 +1453,7 @@ def test_pr_test_command_handler_composes_not_available( "trigger": "pull_request", "job": "tests", "metadata": {"targets": "fedora-rawhide-x86_64", "skip_build": True}, - } + }, ] packit_yaml = ( "{'specfile_path': 'the-specfile.spec', 'synced_files': [], 'jobs': " @@ -1436,10 +1463,10 @@ def test_pr_test_command_handler_composes_not_available( _ = add_pull_request_event_with_sha_0011223344 pr = flexmock( source_project=flexmock( - get_web_url=lambda: "https://github.com/someone/hello-world" + get_web_url=lambda: "https://github.com/someone/hello-world", ), target_project=flexmock( - get_web_url=lambda: "https://github.com/packit-service/hello-world" + get_web_url=lambda: "https://github.com/packit-service/hello-world", ), head_commit="0011223344", target_branch_head_commit="deadbeef", @@ -1474,17 +1501,18 @@ def test_pr_test_command_handler_composes_not_available( flexmock(PipelineModel).should_receive("create").and_return(run_model) flexmock(TFTTestRunTargetModel).should_receive("create").and_return(test_run) flexmock(TFTTestRunGroupModel).should_receive("create").with_args( - [run_model] + [run_model], ).and_return(flexmock(grouped_targets=[test_run])) flexmock(LocalProject, refresh_the_arguments=lambda: None) flexmock(Allowlist, check_and_report=True) pr_embedded_command_comment_event["comment"]["body"] = "/packit test" flexmock( - GithubProject, get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"] + GithubProject, + get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"], ) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( - {"fedora-rawhide-x86_64"} + {"fedora-rawhide-x86_64"}, ) flexmock(TestingFarmJobHelper).should_receive("get_latest_copr_build").never() flexmock(Pushgateway).should_receive("push").times(3).and_return() @@ -1510,7 +1538,7 @@ def test_pr_test_command_handler_composes_not_available( ).once() flexmock(TestingFarmJobHelper).should_receive( - "send_testing_farm_request" + "send_testing_farm_request", ).with_args(endpoint="composes/public").and_return(flexmock(status_code=500)).once() flexmock(StatusReporter).should_receive("report").with_args( @@ -1527,7 +1555,7 @@ def test_pr_test_command_handler_composes_not_available( processing_results = SteveJobs().process_message(pr_embedded_command_comment_event) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -1585,7 +1613,8 @@ def test_pr_test_command_handler_not_allowed_external_contributor_on_internal_TF ).and_return(db_project_object).times(5) pr_embedded_command_comment_event["comment"]["body"] = "/packit test" flexmock( - GithubProject, get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"] + GithubProject, + get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"], ) flexmock(GithubProject).should_receive("is_private").and_return(False).once() flexmock(Pushgateway).should_receive("push").times(1).and_return() @@ -1650,7 +1679,8 @@ def test_pr_build_command_handler_not_allowed_external_contributor_on_internal_T ).and_return(db_project_object).times(8) pr_embedded_command_comment_event["comment"]["body"] = "/packit build" flexmock( - GithubProject, get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"] + GithubProject, + get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"], ) flexmock(GithubProject).should_receive("is_private").and_return(False).once() flexmock(celery_group).should_receive("apply_async").twice() @@ -1671,7 +1701,7 @@ def test_pr_build_command_handler_not_allowed_external_contributor_on_internal_T "or only test job via `/packit test` comment.*", ).once() flexmock(CoprBuildJobHelper).should_receive( - "is_custom_copr_project_defined" + "is_custom_copr_project_defined", ).and_return(False).once() processing_results = SteveJobs().process_message(pr_embedded_command_comment_event) @@ -1687,7 +1717,8 @@ def test_pr_build_command_handler_not_allowed_external_contributor_on_internal_T ], ) def test_trigger_packit_command_without_config( - pr_embedded_command_comment_event, comments + pr_embedded_command_comment_event, + comments, ): flexmock( GithubProject, @@ -1733,13 +1764,14 @@ def test_trigger_packit_command_without_config( "job": "copr_build", "metadata": {"targets": "fedora-rawhide-x86_64"}, }, - ] + ], ] ), indirect=True, ) def test_retest_failed( - mock_pr_comment_functionality, pr_embedded_command_comment_event + mock_pr_comment_functionality, + pr_embedded_command_comment_event, ): pr = flexmock(head_commit="12345") flexmock(GithubProject).should_receive("get_pr").and_return(pr) @@ -1761,7 +1793,9 @@ def test_retest_failed( .mock() ) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.pull_request, event_id=9, commit_sha="12345" + type=ProjectEventModelType.pull_request, + event_id=9, + commit_sha="12345", ).and_return(db_project_event) flexmock(PullRequestModel).should_receive("get_or_create").with_args( pr_id=9, @@ -1772,42 +1806,45 @@ def test_retest_failed( run_model = flexmock() flexmock(PipelineModel).should_receive("create").and_return(run_model) flexmock(TFTTestRunGroupModel).should_receive("create").with_args( - [run_model] + [run_model], ).and_return(flexmock()) pr_embedded_command_comment_event["comment"]["body"] = "/packit retest-failed" flexmock( - GithubProject, get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"] + GithubProject, + get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"], ) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(celery_group).should_receive("apply_async").once() flexmock(CoprHelper).should_receive("get_valid_build_targets").times(3).and_return( - {"test-target"} + {"test-target"}, ) flexmock(TestingFarmJobHelper).should_receive("get_latest_copr_build").and_return( - flexmock(status=BuildStatus.success) + flexmock(status=BuildStatus.success), ) model = flexmock( - TFTTestRunTargetModel, status=TestingFarmResult.failed, target="some_tf_target" + TFTTestRunTargetModel, + status=TestingFarmResult.failed, + target="some_tf_target", ) flexmock(model).should_receive("get_all_by_commit_target").with_args( - commit_sha="12345" + commit_sha="12345", ).and_return(model) flexmock(AbstractForgeIndependentEvent).should_receive( - "get_all_tf_targets_by_status" + "get_all_tf_targets_by_status", ).with_args( - statuses_to_filter_with=[TestingFarmResult.failed, TestingFarmResult.error] + statuses_to_filter_with=[TestingFarmResult.failed, TestingFarmResult.error], ).and_return( - {"some_tf_target"} + {"some_tf_target"}, ) flexmock(packit_service.models).should_receive( - "filter_most_recent_target_names_by_status" + "filter_most_recent_target_names_by_status", ).with_args( models=[model], statuses_to_filter_with=[TestingFarmResult.failed, TestingFarmResult.error], ).and_return( - {"some_target"} + {"some_target"}, ) flexmock(Pushgateway).should_receive("push").times(3).and_return() @@ -1822,7 +1859,7 @@ def test_retest_failed( processing_results = SteveJobs().process_message(pr_embedded_command_comment_event) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert event_dict["tests_targets_override"] == ["some_tf_target"] assert json.dumps(event_dict) @@ -1844,7 +1881,7 @@ def test_pr_test_command_handler_skip_build_option_no_fmf_metadata( "trigger": "pull_request", "job": "tests", "metadata": {"targets": "fedora-rawhide-x86_64", "skip_build": True}, - } + }, ] packit_yaml = ( "{'specfile_path': 'the-specfile.spec', 'synced_files': [], 'jobs': " @@ -1853,10 +1890,10 @@ def test_pr_test_command_handler_skip_build_option_no_fmf_metadata( ) pr = flexmock( source_project=flexmock( - get_web_url=lambda: "https://github.com/someone/hello-world" + get_web_url=lambda: "https://github.com/someone/hello-world", ), target_project=flexmock( - get_web_url=lambda: "https://github.com/packit-service/hello-world" + get_web_url=lambda: "https://github.com/packit-service/hello-world", ), head_commit="0011223344", target_branch_head_commit="deadbeef", @@ -1886,20 +1923,23 @@ def test_pr_test_command_handler_skip_build_option_no_fmf_metadata( pr_embedded_command_comment_event["comment"]["body"] = "/packit test" flexmock( - GithubProject, get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"] + GithubProject, + get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"], ) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( - {"fedora-rawhide-x86_64"} + {"fedora-rawhide-x86_64"}, ) run_model = flexmock(test_run_group=None) test_run = flexmock( - id=1, target="fedora-rawhide-x86_64", status=TestingFarmResult.new + id=1, + target="fedora-rawhide-x86_64", + status=TestingFarmResult.new, ) flexmock(PipelineModel).should_receive("create").and_return(run_model) group_model = flexmock(grouped_targets=[test_run]) flexmock(TFTTestRunGroupModel).should_receive("create").with_args( - [run_model] + [run_model], ).and_return(group_model) flexmock(TFTTestRunTargetModel).should_receive("create").and_return(test_run) flexmock(TestingFarmJobHelper).should_receive("get_latest_copr_build").never() @@ -1935,13 +1975,13 @@ def test_pr_test_command_handler_skip_build_option_no_fmf_metadata( ).once() flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/packit-service/hello-world" + "https://github.com/packit-service/hello-world", ) flexmock(celery_group).should_receive("apply_async").once() processing_results = SteveJobs().process_message(pr_embedded_command_comment_event) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -1961,8 +2001,8 @@ def test_pr_test_command_handler_skip_build_option_no_fmf_metadata( "trigger": "pull_request", "job": "copr_build", "metadata": {"targets": "fedora-rawhide-x86_64"}, - } - ] + }, + ], ] ), indirect=True, @@ -1977,14 +2017,15 @@ def test_invalid_packit_command_with_config( repo_name="hello-world", project_url="https://github.com/packit-service/hello-world", ).and_return( - flexmock(id=9, job_config_trigger_type=JobConfigTriggerType.pull_request) + flexmock(id=9, job_config_trigger_type=JobConfigTriggerType.pull_request), ) ServiceConfig.get_service_config().comment_command_prefix = "/packit" pr_embedded_command_comment_event["comment"][ "body" ] = "/packit i-hate-testing-with-flexmock" flexmock( - GithubProject, get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"] + GithubProject, + get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"], ) flexmock(Pushgateway).should_receive("push").times(1).and_return() flexmock(GithubProject).should_receive("is_private").and_return(False) @@ -2030,7 +2071,8 @@ def test_invalid_packit_command_without_config( def test_pr_test_command_handler_multiple_builds( - add_pull_request_event_with_sha_0011223344, pr_embedded_command_comment_event + add_pull_request_event_with_sha_0011223344, + pr_embedded_command_comment_event, ): _ = add_pull_request_event_with_sha_0011223344 pr_embedded_command_comment_event["comment"][ @@ -2055,10 +2097,10 @@ def test_pr_test_command_handler_multiple_builds( ) pr = flexmock( source_project=flexmock( - get_web_url=lambda: "https://github.com/someone/hello-world" + get_web_url=lambda: "https://github.com/someone/hello-world", ), target_project=flexmock( - get_web_url=lambda: "https://github.com/packit-service/hello-world" + get_web_url=lambda: "https://github.com/packit-service/hello-world", ), head_commit="0011223344", target_branch_head_commit="deadbeef", @@ -2086,11 +2128,12 @@ def test_pr_test_command_handler_multiple_builds( flexmock(LocalProject, refresh_the_arguments=lambda: None) flexmock(Allowlist, check_and_report=True) flexmock( - GithubProject, get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"] + GithubProject, + get_files=lambda ref, recursive: ["foo.spec", ".packit.yaml"], ) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( - {"fedora-rawhide-x86_64", "fedora-35-x86_64"} + {"fedora-rawhide-x86_64", "fedora-35-x86_64"}, ) run_model = flexmock(test_run_group=None) @@ -2104,7 +2147,7 @@ def test_pr_test_command_handler_multiple_builds( "release": "1", "arch": "noarch", "epoch": "0", - } + }, ], build_logs_url=None, owner="mf", @@ -2115,7 +2158,7 @@ def test_pr_test_command_handler_multiple_builds( build.should_receive("get_srpm_build").and_return(flexmock(url=None)) flexmock(TestingFarmJobHelper).should_receive("get_latest_copr_build").and_return( - build + build, ) flexmock(Pushgateway).should_receive("push").times(3).and_return() flexmock(TestingFarmJobHelper).should_receive("report_status_to_tests").with_args( @@ -2135,7 +2178,7 @@ def test_pr_test_command_handler_multiple_builds( "ref": "0011223344", "merge_sha": "deadbeef", "path": ".", - } + }, }, "environments": [ { @@ -2147,7 +2190,7 @@ def test_pr_test_command_handler_multiple_builds( "arch": "x86_64", "trigger": "commit", "initiator": "packit", - } + }, }, "variables": { "PACKIT_FULL_REPO_NAME": "packit-service/hello-world", @@ -2179,31 +2222,31 @@ def test_pr_test_command_handler_multiple_builds( "packages": ["another-repo-0:0.1-1.noarch"], }, ], - } + }, ], "notification": { "webhook": { "url": "https://prod.packit.dev/api/testing-farm/results", "token": "secret-token", - } + }, }, } flexmock(TestingFarmJobHelper).should_receive("is_fmf_configured").and_return(True) flexmock(TestingFarmJobHelper).should_receive("distro2compose").and_return( - "Fedora-Rawhide" + "Fedora-Rawhide", ) pipeline_id = "5e8079d8-f181-41cf-af96-28e99774eb68" flexmock(TestingFarmJobHelper).should_receive( - "send_testing_farm_request" + "send_testing_farm_request", ).with_args(endpoint="requests", method="POST", data=payload).and_return( RequestResponse( status_code=200, ok=True, content=json.dumps({"id": pipeline_id}).encode(), json={"id": pipeline_id}, - ) + ), ) flexmock(StatusReporter).should_receive("report").with_args( @@ -2227,7 +2270,7 @@ def test_pr_test_command_handler_multiple_builds( ).once() flexmock(GithubProject).should_receive("get_web_url").and_return( - "https://github.com/packit-service/hello-world" + "https://github.com/packit-service/hello-world", ) tft_test_run_model_rawhide = flexmock( @@ -2254,7 +2297,7 @@ def test_pr_test_command_handler_multiple_builds( "release": "1", "arch": "noarch", "epoch": "0", - } + }, ], owner="another-owner", project_name="another-repo", @@ -2270,18 +2313,18 @@ def test_pr_test_command_handler_multiple_builds( flexmock(id=16, job_config_trigger_type=JobConfigTriggerType.pull_request) .should_receive("get_copr_builds") .and_return([additional_copr_build]) - .mock() + .mock(), ) flexmock(packit_service.worker.helpers.testing_farm).should_receive( - "filter_most_recent_target_models_by_status" + "filter_most_recent_target_models_by_status", ).with_args( models=[additional_copr_build], statuses_to_filter_with=[BuildStatus.success], ).and_return( - {additional_copr_build} + {additional_copr_build}, ).times( - 2 + 2, ) group = flexmock( @@ -2305,10 +2348,10 @@ def test_pr_test_command_handler_multiple_builds( data={"base_project_url": "https://github.com/packit-service/hello-world"}, ).and_return(model) flexmock(tft_test_run_model_rawhide).should_receive("add_copr_build").with_args( - additional_copr_build + additional_copr_build, ) flexmock(tft_test_run_model_rawhide).should_receive("set_pipeline_id").with_args( - pipeline_id + pipeline_id, ) urls.DASHBOARD_URL = "https://dashboard.localhost" @@ -2325,7 +2368,7 @@ def test_pr_test_command_handler_multiple_builds( processing_results = SteveJobs().process_message(pr_embedded_command_comment_event) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -2350,13 +2393,16 @@ def test_koji_build_retrigger_via_dist_git_pr_comment(pagure_pr_comment_added): default_branch="main", ) pagure_project.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["python-teamcity-messages.spec"]) pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["python-teamcity-messages.spec", ".packit.yaml"]) pagure_pr_comment_added["pullrequest"]["comments"][0][ @@ -2364,13 +2410,14 @@ def test_koji_build_retrigger_via_dist_git_pr_comment(pagure_pr_comment_added): ] = "/packit koji-build" project_event = flexmock( - job_config_trigger_type=JobConfigTriggerType.pull_request, id=123 + job_config_trigger_type=JobConfigTriggerType.pull_request, + id=123, ) flexmock(AddPullRequestEventToDb).should_receive("db_project_object").and_return( - project_event + project_event, ) flexmock(PullRequestModel).should_receive("get_by_id").with_args(123).and_return( - project_event + project_event, ) flexmock(PipelineModel).should_receive("create") @@ -2386,7 +2433,7 @@ def test_koji_build_retrigger_via_dist_git_pr_comment(pagure_pr_comment_added): flexmock(KojiBuildTargetModel).should_receive("create").and_return(koji_build) flexmock(KojiBuildGroupModel).should_receive("create").and_return( - flexmock(grouped_targets=[koji_build]) + flexmock(grouped_targets=[koji_build]), ) db_project_object = flexmock( @@ -2421,7 +2468,7 @@ def test_koji_build_retrigger_via_dist_git_pr_comment(pagure_pr_comment_added): "You can also check the recent Koji build activity of " "`packit` in [the Koji interface]" "(https://koji.fedoraproject.org/koji/userinfo?userID=4641)." - f"{DistgitAnnouncement.get_comment_footer_with_announcement_if_present()}" + f"{DistgitAnnouncement.get_comment_footer_with_announcement_if_present()}", ) .mock() ) @@ -2435,7 +2482,7 @@ def test_koji_build_retrigger_via_dist_git_pr_comment(pagure_pr_comment_added): flexmock(DownstreamKojiBuildHandler).should_receive("pre_check").and_return(True) flexmock(DownstreamKojiBuildHandler).should_receive( - "is_already_triggered" + "is_already_triggered", ).and_return(False) flexmock(LocalProjectBuilder, _refresh_the_state=lambda *args: flexmock()) flexmock(LocalProject, refresh_the_arguments=lambda: None) @@ -2452,7 +2499,7 @@ def test_koji_build_retrigger_via_dist_git_pr_comment(pagure_pr_comment_added): processing_results = SteveJobs().process_message(pagure_pr_comment_added) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) results = run_downstream_koji_build( @@ -2481,13 +2528,14 @@ def test_bodhi_update_retrigger_via_dist_git_pr_comment(pagure_pr_comment_added) ) project_event = flexmock( - job_config_trigger_type=JobConfigTriggerType.pull_request, id=123 + job_config_trigger_type=JobConfigTriggerType.pull_request, + id=123, ) flexmock(AddPullRequestEventToDb).should_receive("db_project_object").and_return( - project_event + project_event, ) flexmock(PullRequestModel).should_receive("get_by_id").with_args(123).and_return( - project_event + project_event, ) run_model_flexmock = flexmock() db_project_object = flexmock( @@ -2496,7 +2544,7 @@ def test_bodhi_update_retrigger_via_dist_git_pr_comment(pagure_pr_comment_added) job_config_trigger_type=JobConfigTriggerType.pull_request, ) flexmock(KojiBuildTargetModel).should_receive("get_by_task_id").with_args( - 79721403 + 79721403, ).and_return(None) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( type=ProjectEventModelType.pull_request, @@ -2522,7 +2570,7 @@ def test_bodhi_update_retrigger_via_dist_git_pr_comment(pagure_pr_comment_added) set_web_url=lambda x: None, set_alias=lambda x: None, set_update_creation_time=lambda x: None, - ) + ), ], ) flexmock(BodhiUpdateGroupModel).should_receive("create").and_return(group_model) @@ -2542,7 +2590,7 @@ def test_bodhi_update_retrigger_via_dist_git_pr_comment(pagure_pr_comment_added) "in [Packit dashboard](/jobs/bodhi-updates). " "You can also check the recent Bodhi update activity of `packit` in " "[the Bodhi interface](https://bodhi.fedoraproject.org/users/packit)." - f"{DistgitAnnouncement.get_comment_footer_with_announcement_if_present()}" + f"{DistgitAnnouncement.get_comment_footer_with_announcement_if_present()}", ) .mock() ) @@ -2556,17 +2604,20 @@ def test_bodhi_update_retrigger_via_dist_git_pr_comment(pagure_pr_comment_added) ) flexmock(KojiHelper).should_receive("get_latest_candidate_build").and_return( - {"nvr": "123", "build_id": 321, "state": 0, "task_id": 123} + {"nvr": "123", "build_id": 321, "state": 0, "task_id": 123}, ) pagure_project.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["jouduv-dort.spec"]) pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["jouduv-dort.spec", ".packit.yaml"]) flexmock(RetriggerBodhiUpdateHandler).should_receive("pre_check").and_return(True) @@ -2585,7 +2636,7 @@ def test_bodhi_update_retrigger_via_dist_git_pr_comment(pagure_pr_comment_added) processing_results = SteveJobs().process_message(pagure_pr_comment_added) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) results = run_retrigger_bodhi_update( @@ -2604,7 +2655,8 @@ def test_pull_from_upstream_retrigger_via_dist_git_pr_comment(pagure_pr_comment_ sync_release_pr_model = flexmock(sync_release_targets=[flexmock(), flexmock()]) model = flexmock(status="queued", id=1234, branch="main") flexmock(SyncReleaseTargetModel).should_receive("create").with_args( - status=SyncReleaseTargetStatus.queued, branch="main" + status=SyncReleaseTargetStatus.queued, + branch="main", ).and_return(model) flexmock(SyncReleasePullRequestModel).should_receive("get_or_create").with_args( pr_id=21, @@ -2625,7 +2677,7 @@ def test_pull_from_upstream_retrigger_via_dist_git_pr_comment(pagure_pr_comment_ .with_args( "The task was accepted. You can check the recent runs of pull from upstream jobs in " "[Packit dashboard](/jobs/pull-from-upstreams)" - f"{DistgitAnnouncement.get_comment_footer_with_announcement_if_present()}" + f"{DistgitAnnouncement.get_comment_footer_with_announcement_if_present()}", ) .mock() ) @@ -2664,18 +2716,18 @@ def test_pull_from_upstream_retrigger_via_dist_git_pr_comment(pagure_pr_comment_ .once() .mock(), git=flexmock(clear_cache=lambda: None), - ) + ), ) flexmock(GithubService).should_receive("set_auth_method").with_args( - AuthMethod.token + AuthMethod.token, ).once() flexmock(GitUpstream).should_receive("get_last_tag").and_return("7.0.3") flexmock(Allowlist, check_and_report=True) flexmock(PackitAPIWithDownstreamMixin).should_receive("is_packager").and_return( - True + True, ) def _get_project(url, *_, **__): @@ -2715,16 +2767,16 @@ def _get_project(url, *_, **__): flexmock(PackitAPI).should_receive("clean") flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.running + status=SyncReleaseTargetStatus.running, ).once() flexmock(model).should_receive("set_downstream_pr_url").with_args( - downstream_pr_url="some_url" + downstream_pr_url="some_url", ).once() flexmock(model).should_receive("set_downstream_pr").with_args( - downstream_pr=sync_release_pr_model + downstream_pr=sync_release_pr_model, ).once() flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.submitted + status=SyncReleaseTargetStatus.submitted, ).once() flexmock(model).should_receive("set_start_time").once() flexmock(model).should_receive("set_finished_time").once() @@ -2761,7 +2813,7 @@ def _get_project(url, *_, **__): package_name="python-teamcity-messages", ).and_return(sync_release_model, run_model).once() flexmock(sync_release_model).should_receive("set_status").with_args( - status=SyncReleaseStatus.finished + status=SyncReleaseStatus.finished, ).once() flexmock(AddPullRequestEventToDb).should_receive("db_project_object").and_return( @@ -2769,18 +2821,18 @@ def _get_project(url, *_, **__): job_config_trigger_type=JobConfigTriggerType.pull_request, id=123, project_event_model_type=ProjectEventModelType.pull_request, - ) + ), ) flexmock(celery_group).should_receive("apply_async").once() flexmock(Pushgateway).should_receive("push").times(2).and_return() flexmock(shutil).should_receive("rmtree").with_args("") flexmock(PullRequestCommentPagureEvent).should_receive( - "get_base_project" + "get_base_project", ).once().and_return(distgit_project) processing_results = SteveJobs().process_message(pagure_pr_comment_added) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -2801,7 +2853,8 @@ def test_pull_from_upstream_retrigger_via_dist_git_pr_comment_non_git( sync_release_pr_model = flexmock(sync_release_targets=[flexmock(), flexmock()]) model = flexmock(status="queued", id=1234, branch="main") flexmock(SyncReleaseTargetModel).should_receive("create").with_args( - status=SyncReleaseTargetStatus.queued, branch="main" + status=SyncReleaseTargetStatus.queued, + branch="main", ).and_return(model) flexmock(SyncReleasePullRequestModel).should_receive("get_or_create").with_args( pr_id=21, @@ -2820,7 +2873,7 @@ def test_pull_from_upstream_retrigger_via_dist_git_pr_comment_non_git( .with_args( "The task was accepted. You can check the recent runs of pull from upstream jobs in " "[Packit dashboard](/jobs/pull-from-upstreams)" - f"{DistgitAnnouncement.get_comment_footer_with_announcement_if_present()}" + f"{DistgitAnnouncement.get_comment_footer_with_announcement_if_present()}", ) .mock() ) @@ -2841,11 +2894,11 @@ def test_pull_from_upstream_retrigger_via_dist_git_pr_comment_non_git( flexmock(DistGit).should_receive("local_project").and_return(lp) flexmock(GithubService).should_receive("set_auth_method").with_args( - AuthMethod.token + AuthMethod.token, ).once() flexmock(Allowlist, check_and_report=True) flexmock(PackitAPIWithDownstreamMixin).should_receive("is_packager").and_return( - True + True, ) def _get_project(url, *_, **__): @@ -2884,16 +2937,16 @@ def _get_project(url, *_, **__): flexmock(PackitAPI).should_receive("clean") flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.running + status=SyncReleaseTargetStatus.running, ).once() flexmock(model).should_receive("set_downstream_pr_url").with_args( - downstream_pr_url="some_url" + downstream_pr_url="some_url", ).once() flexmock(model).should_receive("set_downstream_pr").with_args( - downstream_pr=sync_release_pr_model + downstream_pr=sync_release_pr_model, ).once() flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.submitted + status=SyncReleaseTargetStatus.submitted, ).once() flexmock(model).should_receive("set_start_time").once() flexmock(model).should_receive("set_finished_time").once() @@ -2930,7 +2983,7 @@ def _get_project(url, *_, **__): package_name="python-teamcity-messages", ).and_return(sync_release_model, run_model).once() flexmock(sync_release_model).should_receive("set_status").with_args( - status=SyncReleaseStatus.finished + status=SyncReleaseStatus.finished, ).once() flexmock(AddPullRequestEventToDb).should_receive("db_project_object").and_return( @@ -2938,18 +2991,18 @@ def _get_project(url, *_, **__): job_config_trigger_type=JobConfigTriggerType.pull_request, id=123, project_event_model_type=ProjectEventModelType.pull_request, - ) + ), ) flexmock(celery_group).should_receive("apply_async").once() flexmock(Pushgateway).should_receive("push").times(2).and_return() flexmock(shutil).should_receive("rmtree").with_args("") flexmock(PullRequestCommentPagureEvent).should_receive( - "get_base_project" + "get_base_project", ).once().and_return(distgit_project) processing_results = SteveJobs().process_message(pagure_pr_comment_added) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -2980,13 +3033,16 @@ def test_koji_build_tag_via_dist_git_pr_comment(pagure_pr_comment_added, all_bra default_branch="main", ) pagure_project.should_receive("get_files").with_args( - ref="main", filter_regex=r".+\.spec$" + ref="main", + filter_regex=r".+\.spec$", ).and_return(["python-teamcity-messages.spec"]) pagure_project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="main" + path=".packit.yaml", + ref="main", ).and_return(packit_yaml) pagure_project.should_receive("get_files").with_args( - ref="main", recursive=False + ref="main", + recursive=False, ).and_return(["python-teamcity-messages.spec", ".packit.yaml"]) pagure_pr_comment_added["pullrequest"]["comments"][0]["comment"] = ( @@ -2994,13 +3050,14 @@ def test_koji_build_tag_via_dist_git_pr_comment(pagure_pr_comment_added, all_bra ) project_event = flexmock( - job_config_trigger_type=JobConfigTriggerType.pull_request, id=123 + job_config_trigger_type=JobConfigTriggerType.pull_request, + id=123, ) flexmock(AddPullRequestEventToDb).should_receive("db_project_object").and_return( - project_event + project_event, ) flexmock(PullRequestModel).should_receive("get_by_id").with_args(123).and_return( - project_event + project_event, ) flexmock(PipelineModel).should_receive("create") @@ -3047,45 +3104,52 @@ def test_koji_build_tag_via_dist_git_pr_comment(pagure_pr_comment_added, all_bra flexmock(PackitAPI).should_receive("init_kerberos_ticket").and_return() flexmock(aliases).should_receive("get_branches").with_args( - "fedora-stable", default_dg_branch="rawhide" + "fedora-stable", + default_dg_branch="rawhide", ).and_return({"f39", "f40"}) sidetag_group = flexmock() flexmock(SidetagGroupModel).should_receive("get_or_create").with_args( - "test" + "test", ).and_return(sidetag_group) flexmock(SidetagModel).should_receive("get_or_create_for_updating").with_args( - sidetag_group, "f39" + sidetag_group, + "f39", ).and_return(flexmock(koji_name="f39-build-side-12345", target="f39")) flexmock(SidetagModel).should_receive("get_or_create_for_updating").with_args( - sidetag_group, "f40" + sidetag_group, + "f40", ).and_return(flexmock(koji_name="f40-build-side-12345", target="f40")) flexmock(KojiHelper).should_receive("get_tag_info").with_args( - "f39-build-side-12345" + "f39-build-side-12345", ).and_return(flexmock()) flexmock(KojiHelper).should_receive("get_tag_info").with_args( - "f40-build-side-12345" + "f40-build-side-12345", ).and_return(flexmock()) flexmock(KojiHelper).should_receive("get_latest_stable_nvr").with_args( - "python-ogr", "f39" + "python-ogr", + "f39", ).and_return("python-ogr-0.1-1.fc39") flexmock(KojiHelper).should_receive("get_latest_stable_nvr").with_args( - "python-ogr", "f40" + "python-ogr", + "f40", ).and_return("python-ogr-0.1-1.fc40") if all_branches: flexmock(KojiHelper).should_receive("tag_build").with_args( - "python-ogr-0.1-1.fc39", "f39-build-side-12345" + "python-ogr-0.1-1.fc39", + "f39-build-side-12345", ).once() flexmock(KojiHelper).should_receive("tag_build").with_args( - "python-ogr-0.1-1.fc40", "f40-build-side-12345" + "python-ogr-0.1-1.fc40", + "f40-build-side-12345", ).once() flexmock(Pushgateway).should_receive("push").times(2).and_return() processing_results = SteveJobs().process_message(pagure_pr_comment_added) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) results = run_tag_into_sidetag_handler( diff --git a/tests/integration/test_release_event.py b/tests/integration/test_release_event.py index f31d79c90..8bcf9d8d9 100644 --- a/tests/integration/test_release_event.py +++ b/tests/integration/test_release_event.py @@ -73,7 +73,9 @@ def propose_downstream_model(sync_release_pr_model): ) run_model = flexmock(PipelineModel) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.release, event_id=12, commit_sha="123456" + type=ProjectEventModelType.release, + event_id=12, + commit_sha="123456", ).and_return(db_project_event) flexmock(ProjectReleaseModel).should_receive("get_or_create").with_args( tag_name="0.3.0", @@ -97,7 +99,7 @@ def propose_downstream_model(sync_release_pr_model): ).and_return(sync_release_pr_model) flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_to_all" + "report_status_to_all", ).with_args( description=TASK_ACCEPTED, state=BaseCommitStatus.pending, @@ -141,17 +143,21 @@ def propose_downstream_target_models(fedora_branches): model = ProposeDownstreamTargetModel(status="queued", id_=i, branch=branch) models.append(model) flexmock(SyncReleaseTargetModel).should_receive("create").with_args( - status=SyncReleaseTargetStatus.queued, branch=branch + status=SyncReleaseTargetStatus.queued, + branch=branch, ).and_return(model) yield models def test_dist_git_push_release_handle( - github_release_webhook, propose_downstream_model, sync_release_pr_model + github_release_webhook, + propose_downstream_model, + sync_release_pr_model, ): model = flexmock(status="queued", id=1234, branch="main") flexmock(SyncReleaseTargetModel).should_receive("create").with_args( - status=SyncReleaseTargetStatus.queued, branch="main" + status=SyncReleaseTargetStatus.queued, + branch="main", ).and_return(model) flexmock(SyncReleasePullRequestModel).should_receive("get_or_create").with_args( pr_id=21, @@ -190,7 +196,7 @@ def test_dist_git_push_release_handle( .once() .mock(), git=flexmock(clear_cache=lambda: None), - ) + ), ) flexmock(Allowlist, check_and_report=True) @@ -227,22 +233,22 @@ def test_dist_git_push_release_handle( flexmock(PackitAPI).should_receive("clean") flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.running + status=SyncReleaseTargetStatus.running, ).once() flexmock(model).should_receive("set_downstream_pr_url").with_args( - downstream_pr_url="some_url" + downstream_pr_url="some_url", ) flexmock(model).should_receive("set_downstream_pr").with_args( - downstream_pr=sync_release_pr_model + downstream_pr=sync_release_pr_model, ).once() flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.submitted + status=SyncReleaseTargetStatus.submitted, ).once() flexmock(model).should_receive("set_start_time").once() flexmock(model).should_receive("set_finished_time").once() flexmock(model).should_receive("set_logs").once() flexmock(propose_downstream_model).should_receive("set_status").with_args( - status=SyncReleaseStatus.finished + status=SyncReleaseStatus.finished, ).once() flexmock(group).should_receive("apply_async").once() @@ -251,7 +257,7 @@ def test_dist_git_push_release_handle( url = get_propose_downstream_info_url(model.id) flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_for_branch" + "report_status_for_branch", ).with_args( branch="main", description="Starting propose downstream...", @@ -260,7 +266,7 @@ def test_dist_git_push_release_handle( ).once() flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_for_branch" + "report_status_for_branch", ).with_args( branch="main", description="Propose downstream finished successfully.", @@ -270,7 +276,7 @@ def test_dist_git_push_release_handle( processing_results = SteveJobs().process_message(github_release_webhook) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -316,7 +322,7 @@ def test_dist_git_push_release_handle_multiple_branches( .times(len(fedora_branches)) .mock(), git=flexmock(clear_cache=lambda: None), - ) + ), ) flexmock(Allowlist, check_and_report=True) @@ -327,16 +333,16 @@ def test_dist_git_push_release_handle_multiple_branches( for model in propose_downstream_target_models: url = get_propose_downstream_info_url(model.id) flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.running + status=SyncReleaseTargetStatus.running, ).once() flexmock(model).should_receive("set_downstream_pr_url").with_args( - downstream_pr_url="some_url" + downstream_pr_url="some_url", ) flexmock(model).should_receive("set_downstream_pr").with_args( - downstream_pr=sync_release_pr_model + downstream_pr=sync_release_pr_model, ).once() flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.submitted + status=SyncReleaseTargetStatus.submitted, ).once() flexmock(model).should_receive("set_start_time").once() flexmock(model).should_receive("set_finished_time").once() @@ -370,7 +376,7 @@ def test_dist_git_push_release_handle_multiple_branches( ).and_return(pr).once() flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_for_branch" + "report_status_for_branch", ).with_args( branch=model.branch, description="Starting propose downstream...", @@ -379,7 +385,7 @@ def test_dist_git_push_release_handle_multiple_branches( ).once() flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_for_branch" + "report_status_for_branch", ).with_args( branch=model.branch, description="Propose downstream finished successfully.", @@ -388,7 +394,7 @@ def test_dist_git_push_release_handle_multiple_branches( ).once() flexmock(propose_downstream_model).should_receive("set_status").with_args( - status=SyncReleaseStatus.finished + status=SyncReleaseStatus.finished, ).once() flexmock(PkgTool).should_receive("clone").and_return(None) @@ -398,7 +404,7 @@ def test_dist_git_push_release_handle_multiple_branches( job_config_trigger_type=JobConfigTriggerType.release, id=123, project_event_model_type=ProjectEventModelType.release, - ) + ), ) flexmock(group).should_receive("apply_async").once() flexmock(Pushgateway).should_receive("push").times(3).and_return() @@ -409,7 +415,7 @@ def test_dist_git_push_release_handle_multiple_branches( processing_results = SteveJobs().process_message(github_release_webhook) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -463,7 +469,7 @@ def test_dist_git_push_release_handle_one_failed( .times(len(fedora_branches)) .mock(), git=flexmock(clear_cache=lambda: None), - ) + ), ) flexmock(Allowlist, check_and_report=True) ServiceConfig().get_service_config().get_project = ( @@ -478,7 +484,7 @@ def test_dist_git_push_release_handle_one_failed( flexmock(model).should_receive("set_logs").once() flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_for_branch" + "report_status_for_branch", ).with_args( branch=model.branch, description="Starting propose downstream...", @@ -488,10 +494,10 @@ def test_dist_git_push_release_handle_one_failed( if model.branch != failed_branch: flexmock(model).should_receive("set_downstream_pr_url").with_args( - downstream_pr_url="some_url" + downstream_pr_url="some_url", ) flexmock(model).should_receive("set_downstream_pr").with_args( - downstream_pr=sync_release_pr_model + downstream_pr=sync_release_pr_model, ) target_project = ( flexmock(namespace="downstream-namespace", repo="downstream-repo") @@ -521,7 +527,7 @@ def test_dist_git_push_release_handle_one_failed( warn_about_koji_build_triggering_bug=False, ).and_return(pr).once() flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_for_branch" + "report_status_for_branch", ).with_args( branch=model.branch, description="Propose downstream finished successfully.", @@ -546,7 +552,7 @@ def test_dist_git_push_release_handle_one_failed( warn_about_koji_build_triggering_bug=False, ).and_raise(Exception, f"Failed {model.branch}").once() flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_for_branch" + "report_status_for_branch", ).with_args( branch=model.branch, description=f"Propose downstream failed: Failed {model.branch}", @@ -555,7 +561,7 @@ def test_dist_git_push_release_handle_one_failed( ).once() flexmock(propose_downstream_model).should_receive("set_status").with_args( - status=SyncReleaseStatus.error + status=SyncReleaseStatus.error, ).once() flexmock(PkgTool).should_receive("clone").and_return(None) @@ -566,7 +572,7 @@ def test_dist_git_push_release_handle_one_failed( job_config_trigger_type=JobConfigTriggerType.release, id=123, project_event_model_type=ProjectEventModelType.release, - ) + ), ) flexmock(group).should_receive("apply_async").once() @@ -578,7 +584,7 @@ def test_dist_git_push_release_handle_one_failed( processing_results = SteveJobs().process_message(github_release_webhook) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -604,7 +610,8 @@ def test_dist_git_push_release_handle_all_failed( flexmock(Github, get_repo=lambda full_name_or_id: None) table_content = "" for model in sorted( - propose_downstream_target_models, key=lambda model: model.branch + propose_downstream_target_models, + key=lambda model: model.branch, ): dashboard_url = get_propose_downstream_info_url(model.id) table_content += ( @@ -659,7 +666,7 @@ def test_dist_git_push_release_handle_all_failed( .times(len(fedora_branches)) .mock(), git=flexmock(clear_cache=lambda: None), - ) + ), ) flexmock(Allowlist, check_and_report=True) @@ -668,14 +675,15 @@ def test_dist_git_push_release_handle_all_failed( ) flexmock(PackitAPI).should_receive("sync_release").and_raise( - Exception, "Failed" + Exception, + "Failed", ).times(len(fedora_branches)) flexmock(AddReleaseEventToDb).should_receive("db_project_object").and_return( flexmock( job_config_trigger_type=JobConfigTriggerType.release, id=123, project_event_model_type=ProjectEventModelType.release, - ) + ), ) for model in propose_downstream_target_models: @@ -684,7 +692,7 @@ def test_dist_git_push_release_handle_all_failed( flexmock(model).should_receive("set_finished_time").once() flexmock(model).should_receive("set_logs").once() flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_for_branch" + "report_status_for_branch", ).with_args( branch=model.branch, description="Starting propose downstream...", @@ -693,7 +701,7 @@ def test_dist_git_push_release_handle_all_failed( ).once() flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_for_branch" + "report_status_for_branch", ).with_args( branch=model.branch, description="Propose downstream failed: Failed", @@ -702,11 +710,11 @@ def test_dist_git_push_release_handle_all_failed( ).once() flexmock(propose_downstream_model).should_receive("set_status").with_args( - status=SyncReleaseStatus.error + status=SyncReleaseStatus.error, ).once() flexmock(sentry_integration).should_receive("send_to_sentry").and_return().times( - len(fedora_branches) + len(fedora_branches), ) flexmock(shutil).should_receive("rmtree").with_args("") flexmock(group).should_receive("apply_async").once() @@ -714,7 +722,7 @@ def test_dist_git_push_release_handle_all_failed( processing_results = SteveJobs().process_message(github_release_webhook) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -727,11 +735,13 @@ def test_dist_git_push_release_handle_all_failed( def test_retry_propose_downstream_task( - github_release_webhook, propose_downstream_model + github_release_webhook, + propose_downstream_model, ): model = flexmock(status="queued", id=1234, branch="main") flexmock(SyncReleaseTargetModel).should_receive("create").with_args( - status=SyncReleaseTargetStatus.queued, branch="main" + status=SyncReleaseTargetStatus.queued, + branch="main", ).and_return(model) packit_yaml = ( @@ -765,7 +775,7 @@ def test_retry_propose_downstream_task( .once() .mock(), git=flexmock(clear_cache=lambda: None), - ) + ), ) flexmock(Allowlist, check_and_report=True) @@ -778,7 +788,7 @@ def test_retry_propose_downstream_task( job_config_trigger_type=JobConfigTriggerType.release, id=123, project_event_model_type=ProjectEventModelType.release, - ) + ), ) flexmock(group).should_receive("apply_async").once() @@ -798,14 +808,15 @@ def test_retry_propose_downstream_task( fast_forward_merge_branches=set(), warn_about_koji_build_triggering_bug=False, ).and_raise( - PackitDownloadFailedException, "Failed to download source from example.com" + PackitDownloadFailedException, + "Failed to download source from example.com", ).once() flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.running + status=SyncReleaseTargetStatus.running, ).once() flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.retry + status=SyncReleaseTargetStatus.retry, ).once() flexmock(model).should_receive("set_start_time").once() flexmock(model).should_receive("set_finished_time").once() @@ -817,7 +828,7 @@ def test_retry_propose_downstream_task( url = get_propose_downstream_info_url(model.id) flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_for_branch" + "report_status_for_branch", ).with_args( branch="main", description="Starting propose downstream...", @@ -825,7 +836,7 @@ def test_retry_propose_downstream_task( url=url, ).once() flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_to_all" + "report_status_to_all", ).with_args( description="Propose downstream is being retried because " "we were not able yet to download the archive. ", @@ -835,7 +846,7 @@ def test_retry_propose_downstream_task( processing_results = SteveJobs().process_message(github_release_webhook) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -846,11 +857,13 @@ def test_retry_propose_downstream_task( def test_dont_retry_propose_downstream_task( - github_release_webhook, propose_downstream_model + github_release_webhook, + propose_downstream_model, ): model = ProposeDownstreamTargetModel(status="queued", id_=1234, branch="main") flexmock(SyncReleaseTargetModel).should_receive("create").with_args( - status=SyncReleaseTargetStatus.queued, branch="main" + status=SyncReleaseTargetStatus.queued, + branch="main", ).and_return(model) packit_yaml = ( "{'specfile_path': 'hello-world.spec', 'synced_files': []" @@ -893,7 +906,7 @@ def test_dont_retry_propose_downstream_task( job_config_trigger_type=JobConfigTriggerType.release, id=123, project_event_model_type=ProjectEventModelType.release, - ) + ), ) flexmock(group).should_receive("apply_async").once() @@ -913,14 +926,15 @@ def test_dont_retry_propose_downstream_task( fast_forward_merge_branches=set(), warn_about_koji_build_triggering_bug=False, ).and_raise( - PackitDownloadFailedException, "Failed to download source from example.com" + PackitDownloadFailedException, + "Failed to download source from example.com", ).once() flexmock(model).should_receive("set_start_time").once() flexmock(model).should_receive("set_finished_time").once() flexmock(model).should_receive("set_logs").once() flexmock(propose_downstream_model).should_receive("set_status").with_args( - status=SyncReleaseStatus.error + status=SyncReleaseStatus.error, ).once() flexmock(LocalProject).should_receive("git_repo").and_return( @@ -931,7 +945,7 @@ def test_dont_retry_propose_downstream_task( .once() .mock(), git=flexmock(clear_cache=lambda: None), - ) + ), ) flexmock(Context, retries=6) flexmock(shutil).should_receive("rmtree").with_args("") @@ -940,7 +954,7 @@ def test_dont_retry_propose_downstream_task( url = get_propose_downstream_info_url(model.id) flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_for_branch" + "report_status_for_branch", ).with_args( branch="main", description="Starting propose downstream...", @@ -948,7 +962,7 @@ def test_dont_retry_propose_downstream_task( url=url, ).once() flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_for_branch" + "report_status_for_branch", ).with_args( branch="main", description="Propose downstream failed: Failed to download source from example.com", @@ -958,7 +972,7 @@ def test_dont_retry_propose_downstream_task( processing_results = SteveJobs().process_message(github_release_webhook) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) @@ -986,7 +1000,8 @@ def test_dist_git_push_release_failed_issue_creation_disabled( model.set_status(SyncReleaseTargetStatus.error) for model in sorted( - propose_downstream_target_models, key=lambda model: model.branch + propose_downstream_target_models, + key=lambda model: model.branch, ): table_content += ( f"| `{model.branch}` | See {get_propose_downstream_info_url(model.id)} |\n" @@ -1018,7 +1033,7 @@ def test_dist_git_push_release_failed_issue_creation_disabled( flexmock( head=flexmock(), git=flexmock(clear_cache=lambda: None), - ) + ), ) flexmock(Allowlist, check_and_report=True) @@ -1031,15 +1046,15 @@ def test_dist_git_push_release_failed_issue_creation_disabled( job_config_trigger_type=JobConfigTriggerType.release, id=123, project_event_model_type=ProjectEventModelType.release, - ) + ), ) for _ in propose_downstream_target_models: flexmock(AbstractSyncReleaseHandler).should_receive( - "run_for_target" + "run_for_target", ).and_return("some error") flexmock(propose_downstream_model).should_receive("set_status").with_args( - status=SyncReleaseStatus.error + status=SyncReleaseStatus.error, ).once() flexmock(shutil).should_receive("rmtree").with_args("") @@ -1048,7 +1063,7 @@ def test_dist_git_push_release_failed_issue_creation_disabled( processing_results = SteveJobs().process_message(github_release_webhook) event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) diff --git a/tests/integration/test_vm_image_build.py b/tests/integration/test_vm_image_build.py index 65325848f..db3d9d67b 100644 --- a/tests/integration/test_vm_image_build.py +++ b/tests/integration/test_vm_image_build.py @@ -60,23 +60,28 @@ def test_vm_image_build(github_vm_image_build_comment): head_commit="123456", comment=lambda _: None, get_comment=lambda _: flexmock(add_reaction=lambda _: None), - ) + ), ) project.should_receive("has_write_access").with_args( - user="majamassarini" + user="majamassarini", ).and_return(True) project.should_receive("get_files").with_args( - ref="123456", filter_regex=r".+\.spec$" + ref="123456", + filter_regex=r".+\.spec$", ).and_return(["packit.spec"]) project.should_receive("get_file_content").with_args( - path=".packit.yaml", ref="123456" + path=".packit.yaml", + ref="123456", ).and_return(packit_yaml) project.should_receive("get_files").with_args( - ref="123456", recursive=False + ref="123456", + recursive=False, ).and_return(["packit.spec", ".packit.yaml"]) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.pull_request, event_id=1, commit_sha="123456" + type=ProjectEventModelType.pull_request, + event_id=1, + commit_sha="123456", ).and_return(flexmock()) flexmock(PullRequestModel).should_receive("get_or_create").and_return( flexmock( @@ -84,7 +89,7 @@ def test_vm_image_build(github_vm_image_build_comment): project_event_model_type=ProjectEventModelType.pull_request, id=1, commit_sha="123456", - ) + ), ) flexmock(Allowlist).should_receive("check_and_report").and_return(True) @@ -96,8 +101,8 @@ def test_vm_image_build(github_vm_image_build_comment): target="fedora-36-x86_64", status="success", get_project_event_object=lambda: flexmock(id=1), - ) - ] + ), + ], ) flexmock(group).should_receive("apply_async").times(1) repo_download_url = ( @@ -105,7 +110,7 @@ def test_vm_image_build(github_vm_image_build_comment): "results/mmassari/knx-stack/fedora-36-x86_64/" ) flexmock(CoprHelper).should_receive("get_repo_download_url").once().and_return( - repo_download_url + repo_download_url, ) flexmock(VMImageBuildHandler).should_receive("vm_image_builder").and_return( flexmock() @@ -121,7 +126,7 @@ def test_vm_image_build(github_vm_image_build_comment): {"packages": ["python-knx-stack"]}, repo_download_url, ) - .mock() + .mock(), ) flexmock(VMImageBuildHandler).should_receive("report_status") flexmock(PipelineModel).should_receive("create").and_return(flexmock()) @@ -131,7 +136,7 @@ def test_vm_image_build(github_vm_image_build_comment): processing_results = SteveJobs().process_message(github_vm_image_build_comment) event_dict, _, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) results = run_vm_image_build( diff --git a/tests/unit/conftest.py b/tests/unit/conftest.py index ea03d8869..abf8208ee 100644 --- a/tests/unit/conftest.py +++ b/tests/unit/conftest.py @@ -22,7 +22,7 @@ def mock_get_aliases(): "fedora-stable": ["fedora-31", "fedora-32"], "fedora-development": ["fedora-33", "fedora-rawhide"], "epel-all": ["epel-6", "epel-7", "epel-8"], - } + }, ) @@ -45,8 +45,9 @@ def fake_package_config_job_config_project_db_trigger(): identifier="", packages={ "knx-stack": flexmock( - specfile_path="knx-stack.spec", copr_chroot="fedora-36-x86_64" - ) + specfile_path="knx-stack.spec", + copr_chroot="fedora-36-x86_64", + ), }, package=None, ) @@ -73,7 +74,7 @@ def add_pull_request_event_with_empty_sha(): commit_sha="", ) flexmock(PullRequestModel).should_receive("get_or_create").and_return( - db_project_object + db_project_object, ) db_project_event = ( flexmock(id=2, type=ProjectEventModelType.pull_request, commit_sha="") @@ -83,7 +84,9 @@ def add_pull_request_event_with_empty_sha(): ) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.pull_request, event_id=123, commit_sha="" + type=ProjectEventModelType.pull_request, + event_id=123, + commit_sha="", ).and_return(db_project_event) yield db_project_object, db_project_event diff --git a/tests/unit/events/conftest.py b/tests/unit/events/conftest.py index 03a5c246d..6b68227aa 100644 --- a/tests/unit/events/conftest.py +++ b/tests/unit/events/conftest.py @@ -33,7 +33,9 @@ def tf_models(): tf.__class__ = TFTTestRunTargetModel another_fake_tf = flexmock( - pipeline_id="2", submitted_time=latest_time, target="target" + pipeline_id="2", + submitted_time=latest_time, + target="target", ) flexmock(TFTTestRunTargetModel).new_instances(another_fake_tf) another_tf = TFTTestRunTargetModel() diff --git a/tests/unit/events/test_anitya.py b/tests/unit/events/test_anitya.py index 58bbe40b8..7802bdf5b 100644 --- a/tests/unit/events/test_anitya.py +++ b/tests/unit/events/test_anitya.py @@ -91,7 +91,7 @@ def test_parse_new_hotness_update( event_object = Parser.parse_event(new_hotness_update) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=None, project=event_object.project, @@ -103,11 +103,13 @@ def test_parse_new_hotness_update( upstream_project_url=upstream_project_url, upstream_tag_template=upstream_tag_template, get_packages_config=lambda: flexmock(), - ) + ), ).once() flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.release, event_id="123", commit_sha=None + type=ProjectEventModelType.release, + event_id="123", + commit_sha=None, ).and_return(flexmock()) flexmock(ProjectReleaseModel).should_receive("get_or_create").with_args( tag_name=tag_name, @@ -116,7 +118,7 @@ def test_parse_new_hotness_update( project_url=upstream_project_url, commit_hash=None, ).and_return( - flexmock(project_event_model_type=ProjectEventModelType.release, id="123") + flexmock(project_event_model_type=ProjectEventModelType.release, id="123"), ) assert isinstance(event_object, NewHotnessUpdateEvent) @@ -141,7 +143,7 @@ def test_parse_anitya_version_update(anitya_version_update): event = Parser.parse_event(anitya_version_update) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=None, project=event.project, @@ -153,11 +155,13 @@ def test_parse_anitya_version_update(anitya_version_update): upstream_project_url="https://github.com/vemel/mypy_boto3", upstream_tag_template="{version}", get_packages_config=lambda: flexmock(), - ) + ), ).once() flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.release, event_id="123", commit_sha=None + type=ProjectEventModelType.release, + event_id="123", + commit_sha=None, ).and_return(flexmock()) assert isinstance(event, AnityaVersionUpdateEvent) diff --git a/tests/unit/events/test_copr.py b/tests/unit/events/test_copr.py index 9faa149a7..660cdd717 100644 --- a/tests/unit/events/test_copr.py +++ b/tests/unit/events/test_copr.py @@ -37,7 +37,9 @@ def copr_models(): copr.__class__ = CoprBuildTargetModel another_fake_copr = flexmock( - build_id="2", build_submitted_time=latest_time, target="target" + build_id="2", + build_submitted_time=latest_time, + target="target", ) flexmock(CoprBuildTargetModel).new_instances(another_fake_copr) another_copr = CoprBuildTargetModel() @@ -48,10 +50,12 @@ def copr_models(): @pytest.mark.parametrize("build_id", (1044215, "1044215")) def test_parse_copr_build_event_start( - copr_build_results_start, copr_build_pr, build_id + copr_build_results_start, + copr_build_pr, + build_id, ): flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_pr + copr_build_pr, ) event_object = Parser.parse_event(copr_build_results_start) @@ -81,7 +85,7 @@ def test_parse_copr_build_event_start( ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=None, project=event_object.project, @@ -89,7 +93,7 @@ def test_parse_copr_build_event_start( reference="0011223344", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config @@ -97,7 +101,7 @@ def test_parse_copr_build_event_start( def test_parse_copr_build_event_end(copr_build_results_end, copr_build_pr): flexmock(CoprBuildTargetModel).should_receive("get_by_build_id").and_return( - copr_build_pr + copr_build_pr, ) event_object = Parser.parse_event(copr_build_results_end) @@ -115,7 +119,7 @@ def test_parse_copr_build_event_end(copr_build_results_end, copr_build_pr): assert event_object.git_ref == "0011223344" flexmock(GithubProject).should_receive("get_pr").with_args(pr_id=123).and_return( - flexmock(author="the-fork") + flexmock(author="the-fork"), ) assert isinstance(event_object.project, GithubProject) assert event_object.project.full_repo_name == "packit-service/hello-world" @@ -125,7 +129,7 @@ def test_parse_copr_build_event_end(copr_build_results_end, copr_build_pr): ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=None, project=event_object.project, @@ -133,7 +137,7 @@ def test_parse_copr_build_event_end(copr_build_results_end, copr_build_pr): reference="0011223344", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config @@ -143,7 +147,7 @@ def test_get_most_recent_targets(copr_models, tf_models): latest_copr_models = get_most_recent_targets(copr_models) assert len(latest_copr_models) == 1 assert datetime.utcnow() - latest_copr_models[0].build_submitted_time < timedelta( - seconds=2 + seconds=2, ) latest_tf_models = get_most_recent_targets(tf_models) diff --git a/tests/unit/events/test_github.py b/tests/unit/events/test_github.py index 893d16ad5..87dc948cb 100644 --- a/tests/unit/events/test_github.py +++ b/tests/unit/events/test_github.py @@ -48,7 +48,7 @@ def github_installation(): @pytest.fixture() def github_issue_comment_propose_downstream(): with open( - DATA_DIR / "webhooks" / "github" / "issue_propose_downstream.json" + DATA_DIR / "webhooks" / "github" / "issue_propose_downstream.json", ) as outfile: return json.load(outfile) @@ -56,7 +56,9 @@ def github_issue_comment_propose_downstream(): @pytest.fixture() def github_issue_comment_no_handler(): return json.loads( - (DATA_DIR / "webhooks" / "github" / "issue_comment_no_handler.json").read_text() + ( + DATA_DIR / "webhooks" / "github" / "issue_comment_no_handler.json" + ).read_text(), ) @@ -81,7 +83,7 @@ def github_push_branch(): @pytest.fixture() def check_rerun(): with open( - DATA_DIR / "webhooks" / "github" / "checkrun_rerequested.json" + DATA_DIR / "webhooks" / "github" / "checkrun_rerequested.json", ) as outfile: return json.load(outfile) @@ -89,7 +91,7 @@ def check_rerun(): @pytest.fixture() def github_pr_comment_created(): with open( - DATA_DIR / "webhooks" / "github" / "pr_comment_copr_build.json" + DATA_DIR / "webhooks" / "github" / "pr_comment_copr_build.json", ) as outfile: return json.load(outfile) @@ -141,7 +143,7 @@ def test_parse_pr(github_pr_webhook): ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=None, project=event_object.project, @@ -149,7 +151,7 @@ def test_parse_pr(github_pr_webhook): reference="528b803be6f93e19ca4130bf4976f2800a3004c4", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config @@ -169,7 +171,7 @@ def test_parse_github_push(github_push_branch): assert not event_object.base_project flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=event_object.base_project, project=event_object.project, @@ -177,7 +179,7 @@ def test_parse_github_push(github_push_branch): reference="04885ff850b0fa0e206cd09db73565703d48f99b", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config @@ -197,7 +199,7 @@ def test_parse_github_push_branch(github_push_branch): assert not event_object.base_project flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=event_object.base_project, project=event_object.project, @@ -205,7 +207,7 @@ def test_parse_github_push_branch(github_push_branch): reference="04885ff850b0fa0e206cd09db73565703d48f99b", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config @@ -237,10 +239,10 @@ def test_parse_check_rerun_commit(check_rerun): trigger = flexmock(ProjectEventModel, event_id=123) branch_model = GitBranchModel(name="main") flexmock(ProjectEventModel).should_receive("get_by_id").with_args( - 123456 + 123456, ).and_return(trigger) flexmock(trigger).should_receive("get_project_event_object").and_return( - branch_model + branch_model, ) event_object = Parser.parse_event(check_rerun) @@ -259,7 +261,7 @@ def test_parse_check_rerun_commit(check_rerun): assert not event_object.base_project flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=event_object.base_project, project=event_object.project, @@ -267,7 +269,7 @@ def test_parse_check_rerun_commit(check_rerun): reference="0e5d8b51fd5dfa460605e1497d22a76d65c6d7fd", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config assert event_object.build_targets_override is None @@ -279,7 +281,7 @@ def test_parse_check_rerun_pull_request(check_rerun): trigger = flexmock(ProjectEventModel, event_id=1234) pr_model = PullRequestModel(pr_id=12) flexmock(ProjectEventModel).should_receive("get_by_id").with_args( - 123456 + 123456, ).and_return(trigger) flexmock(trigger).should_receive("get_project_event_object").and_return(pr_model) event_object = Parser.parse_event(check_rerun) @@ -301,7 +303,7 @@ def test_parse_check_rerun_pull_request(check_rerun): assert event_object.actor == "lbarcziova" flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=None, project=event_object.project, @@ -309,7 +311,7 @@ def test_parse_check_rerun_pull_request(check_rerun): reference="0e5d8b51fd5dfa460605e1497d22a76d65c6d7fd", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config assert event_object.build_targets_override is None @@ -320,10 +322,10 @@ def test_parse_check_rerun_release(check_rerun): trigger = flexmock(ProjectEventModel, event_id=123) release_model = ProjectReleaseModel(tag_name="0.1.0") flexmock(ProjectEventModel).should_receive("get_by_id").with_args( - 123456 + 123456, ).and_return(trigger) flexmock(trigger).should_receive("get_project_event_object").and_return( - release_model + release_model, ) event_object = Parser.parse_event(check_rerun) @@ -364,11 +366,11 @@ def test_parse_pr_comment_created(github_pr_comment_created): ) flexmock(GithubProject).should_receive("get_pr").with_args(9).and_return( - flexmock(head_commit="12345") + flexmock(head_commit="12345"), ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=None, project=event_object.project, @@ -376,7 +378,7 @@ def test_parse_pr_comment_created(github_pr_comment_created): reference="12345", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config @@ -402,11 +404,11 @@ def test_parse_pr_comment_empty(github_pr_comment_empty): ) flexmock(GithubProject).should_receive("get_pr").with_args(9).and_return( - flexmock(head_commit="12345") + flexmock(head_commit="12345"), ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=None, project=event_object.project, @@ -414,7 +416,7 @@ def test_parse_pr_comment_empty(github_pr_comment_empty): reference="12345", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config @@ -442,11 +444,11 @@ def test_parse_issue_comment(github_issue_comment_propose_downstream): assert not event_object.base_project flexmock(event_object.project).should_receive("get_releases").and_return( - [flexmock(tag_name="0.5.0")] + [flexmock(tag_name="0.5.0")], ) flexmock(GithubProject, get_sha_from_tag=lambda tag_name: "123456") flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=event_object.base_project, project=event_object.project, @@ -454,7 +456,7 @@ def test_parse_issue_comment(github_issue_comment_propose_downstream): reference="123456", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config @@ -470,7 +472,7 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): flexmock(event_object.project).should_receive("get_releases").and_return([]) flexmock(GithubProject).should_receive("get_sha_from_tag").never() flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=event_object.base_project, project=event_object.project, @@ -478,7 +480,7 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): reference=None, fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config assert event_object.commit_sha is None @@ -492,8 +494,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "propose-downstream:f35", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.release - ) + job_config_trigger_type=JobConfigTriggerType.release, + ), ), ("propose-downstream", "f35", None), id="propose_downstream", @@ -502,8 +504,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "propose-downstream:f35:first", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.release - ) + job_config_trigger_type=JobConfigTriggerType.release, + ), ), ("propose-downstream", "f35", "first"), id="propose_downstream_identifier", @@ -512,8 +514,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "rpm-build:fedora-35-x86_64", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.pull_request - ) + job_config_trigger_type=JobConfigTriggerType.pull_request, + ), ), ("rpm-build", "fedora-35-x86_64", None), id="rpm_build_pr", @@ -522,8 +524,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "rpm-build:1.0.1:fedora-35-x86_64", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.release - ) + job_config_trigger_type=JobConfigTriggerType.release, + ), ), ("rpm-build", "fedora-35-x86_64", None), id="rpm_build_release", @@ -532,8 +534,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "rpm-build:main:fedora-35-x86_64", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.commit - ) + job_config_trigger_type=JobConfigTriggerType.commit, + ), ), ("rpm-build", "fedora-35-x86_64", None), id="rpm_build_commit", @@ -542,8 +544,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "rpm-build:fedora-35-x86_64:first", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.pull_request - ) + job_config_trigger_type=JobConfigTriggerType.pull_request, + ), ), ("rpm-build", "fedora-35-x86_64", "first"), id="rpm_build_pr_identifier", @@ -552,8 +554,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "rpm-build:1.0.1:fedora-35-x86_64:first", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.release - ) + job_config_trigger_type=JobConfigTriggerType.release, + ), ), ("rpm-build", "fedora-35-x86_64", "first"), id="rpm_build_release_identifier", @@ -562,8 +564,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "rpm-build:main:fedora-35-x86_64:first", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.commit - ) + job_config_trigger_type=JobConfigTriggerType.commit, + ), ), ("rpm-build", "fedora-35-x86_64", "first"), id="rpm_build_commit_identifier", @@ -572,8 +574,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "testing-farm:fedora-35-x86_64", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.pull_request - ) + job_config_trigger_type=JobConfigTriggerType.pull_request, + ), ), ("testing-farm", "fedora-35-x86_64", None), id="testing_farm_pr", @@ -582,8 +584,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "testing-farm:1.0.1:fedora-35-x86_64", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.release - ) + job_config_trigger_type=JobConfigTriggerType.release, + ), ), ("testing-farm", "fedora-35-x86_64", None), id="testing_farm_release", @@ -592,8 +594,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "testing-farm:main:fedora-35-x86_64", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.commit - ) + job_config_trigger_type=JobConfigTriggerType.commit, + ), ), ("testing-farm", "fedora-35-x86_64", None), id="testing_farm_commit", @@ -602,8 +604,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "testing-farm:fedora-35-x86_64:first", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.pull_request - ) + job_config_trigger_type=JobConfigTriggerType.pull_request, + ), ), ("testing-farm", "fedora-35-x86_64", "first"), id="testing_farm_pr_identifier", @@ -612,8 +614,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "testing-farm:1.0.1:fedora-35-x86_64:first", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.release - ) + job_config_trigger_type=JobConfigTriggerType.release, + ), ), ("testing-farm", "fedora-35-x86_64", "first"), id="testing_farm_release_identifier", @@ -622,8 +624,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "testing-farm:main:fedora-35-x86_64:first", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.commit - ) + job_config_trigger_type=JobConfigTriggerType.commit, + ), ), ("testing-farm", "fedora-35-x86_64", "first"), id="testing_farm_commit_identifier", @@ -632,8 +634,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "koji-build:fedora-35-x86_64", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.pull_request - ) + job_config_trigger_type=JobConfigTriggerType.pull_request, + ), ), ("koji-build", "fedora-35-x86_64", None), id="koji_build_pr", @@ -642,8 +644,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "koji-build:1.0.1:fedora-35-x86_64", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.release - ) + job_config_trigger_type=JobConfigTriggerType.release, + ), ), ("koji-build", "fedora-35-x86_64", None), id="koji_build_release", @@ -652,8 +654,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "koji-build:main:fedora-35-x86_64", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.commit - ) + job_config_trigger_type=JobConfigTriggerType.commit, + ), ), ("koji-build", "fedora-35-x86_64", None), id="koji_build_commit", @@ -662,8 +664,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "koji-build:fedora-35-x86_64:first", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.pull_request - ) + job_config_trigger_type=JobConfigTriggerType.pull_request, + ), ), ("koji-build", "fedora-35-x86_64", "first"), id="koji_build_pr_identifier", @@ -672,8 +674,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "koji-build:1.0.1:fedora-35-x86_64:first", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.release - ) + job_config_trigger_type=JobConfigTriggerType.release, + ), ), ("koji-build", "fedora-35-x86_64", "first"), id="koji_build_release_identifier", @@ -682,8 +684,8 @@ def test_parse_issue_comment_no_handler(github_issue_comment_no_handler): "koji-build:main:fedora-35-x86_64:first", flexmock( get_project_event_object=flexmock( - job_config_trigger_type=JobConfigTriggerType.commit - ) + job_config_trigger_type=JobConfigTriggerType.commit, + ), ), ("koji-build", "fedora-35-x86_64", "first"), id="koji_build_commit_identifier", diff --git a/tests/unit/events/test_gitlab.py b/tests/unit/events/test_gitlab.py index 241f54ddf..9c40fe284 100644 --- a/tests/unit/events/test_gitlab.py +++ b/tests/unit/events/test_gitlab.py @@ -44,7 +44,7 @@ def merge_request_closed(): @pytest.fixture() def gitlab_push(): with open( - DATA_DIR / "webhooks" / "gitlab" / "push_with_one_commit.json" + DATA_DIR / "webhooks" / "gitlab" / "push_with_one_commit.json", ) as outfile: return json.load(outfile) @@ -52,7 +52,7 @@ def gitlab_push(): @pytest.fixture() def gitlab_push_many_commits(): with open( - DATA_DIR / "webhooks" / "gitlab" / "push_with_many_commits.json" + DATA_DIR / "webhooks" / "gitlab" / "push_with_many_commits.json", ) as outfile: return json.load(outfile) @@ -143,7 +143,7 @@ def test_parse_mr(merge_request): assert event_object.base_project.full_repo_name == "testing/packit/hello-there" flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=event_object.base_project, project=event_object.project, @@ -151,7 +151,7 @@ def test_parse_mr(merge_request): reference="1f6a716aa7a618a9ffe56970d77177d99d100022", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config @@ -169,7 +169,7 @@ def test_parse_mr_action(merge_request_update): assert event_object.base_project.full_repo_name == "testing/packit/hello-there" flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=event_object.base_project, project=event_object.project, @@ -177,7 +177,7 @@ def test_parse_mr_action(merge_request_update): reference="45e272a57335e4e308f3176df6e9226a9e7805a9", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config @@ -210,7 +210,7 @@ def test_parse_mr_comment(gitlab_mr_comment): assert event_object.base_project.full_repo_name == "testing/packit/hello-there" flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=event_object.base_project, project=event_object.project, @@ -218,7 +218,7 @@ def test_parse_mr_comment(gitlab_mr_comment): reference="45e272a57335e4e308f3176df6e9226a9e7805a9", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config @@ -240,11 +240,11 @@ def test_parse_gitlab_issue_comment(gitlab_issue_comment): assert event_object.project.full_repo_name == "testing/packit/hello-there" flexmock(event_object.project).should_receive("get_releases").and_return( - [flexmock(tag_name="0.5.0")] + [flexmock(tag_name="0.5.0")], ) flexmock(event_object.project, get_sha_from_tag=lambda tag_name: "123456") flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=event_object.base_project, project=event_object.project, @@ -252,7 +252,7 @@ def test_parse_gitlab_issue_comment(gitlab_issue_comment): reference="123456", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config @@ -272,7 +272,7 @@ def test_parse_gitlab_push(gitlab_push): assert not event_object.base_project flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=event_object.base_project, project=event_object.project, @@ -280,7 +280,7 @@ def test_parse_gitlab_push(gitlab_push): reference="cb2859505e101785097e082529dced35bbee0c8f", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config @@ -303,7 +303,7 @@ def test_parse_gitlab_push_many_commits(gitlab_push_many_commits): assert not event_object.base_project flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=event_object.base_project, project=event_object.project, @@ -311,7 +311,7 @@ def test_parse_gitlab_push_many_commits(gitlab_push_many_commits): reference="15af92227f9e965b392e85ba2f08a41a5aeb278a", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config @@ -343,7 +343,7 @@ def test_parse_gitlab_pipeline(gitlab_mr_pipeline): assert not event_object.base_project flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=event_object.base_project, project=event_object.project, @@ -351,6 +351,6 @@ def test_parse_gitlab_pipeline(gitlab_mr_pipeline): reference="ee58e259da263ecb4c1f0129be7aef8cfd4dedd6", fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() assert event_object.packages_config diff --git a/tests/unit/events/test_koji.py b/tests/unit/events/test_koji.py index 8527ee2a0..f3a1cc902 100644 --- a/tests/unit/events/test_koji.py +++ b/tests/unit/events/test_koji.py @@ -18,7 +18,7 @@ def test_parse_koji_build_scratch_event_start(koji_build_scratch_start, koji_build_pr): flexmock(KojiBuildTargetModel).should_receive("get_by_task_id").and_return( - koji_build_pr + koji_build_pr, ) event_object = Parser.parse_event(koji_build_scratch_start) @@ -34,7 +34,7 @@ def test_parse_koji_build_scratch_event_start(koji_build_scratch_start, koji_bui def test_parse_koji_build_scratch_event_end(koji_build_scratch_end, koji_build_pr): flexmock(KojiBuildTargetModel).should_receive("get_by_task_id").and_return( - koji_build_pr + koji_build_pr, ) event_object = Parser.parse_event(koji_build_scratch_end) @@ -44,18 +44,19 @@ def test_parse_koji_build_scratch_event_end(koji_build_scratch_end, koji_build_p assert event_object.state == KojiTaskState.closed assert event_object.rpm_build_task_ids == {"noarch": 45270227} assert event_object.get_koji_build_rpm_tasks_logs_urls() == { - "noarch": "https://kojipkgs.fedoraproject.org//work/tasks/227/45270227/build.log" + "noarch": "https://kojipkgs.fedoraproject.org//work/tasks/227/45270227/build.log", } flexmock(GithubProject).should_receive("get_pr").with_args(pr_id=123).and_return( - flexmock(author="the-fork") + flexmock(author="the-fork"), ) assert isinstance(event_object.project, GithubProject) assert event_object.project.full_repo_name == "foo/bar" def test_parse_koji_build_event_start_old_format( - koji_build_start_old_format, mock_config + koji_build_start_old_format, + mock_config, ): event_object = Parser.parse_event(koji_build_start_old_format) @@ -87,7 +88,8 @@ def test_parse_koji_build_event_start_old_format( ref="rawhide", ).and_raise(FileNotFoundError, "Not found.") flexmock(PagureProject).should_receive("get_file_content").with_args( - path=".packit.yaml", ref="rawhide" + path=".packit.yaml", + ref="rawhide", ).and_return(packit_yaml) assert event_object.packages_config @@ -127,7 +129,8 @@ def test_parse_koji_build_event_start_rawhide(koji_build_start_rawhide, mock_con ref="rawhide", ).and_raise(FileNotFoundError, "Not found.") flexmock(PagureProject).should_receive("get_file_content").with_args( - path=".packit.yaml", ref="rawhide" + path=".packit.yaml", + ref="rawhide", ).and_return(packit_yaml) assert event_object.packages_config @@ -167,7 +170,8 @@ def test_parse_koji_build_event_start_f36(koji_build_start_f36, mock_config): ref="rawhide", ).and_raise(FileNotFoundError, "Not found.") flexmock(PagureProject).should_receive("get_file_content").with_args( - path=".packit.yaml", ref="rawhide" + path=".packit.yaml", + ref="rawhide", ).and_return(packit_yaml) assert event_object.packages_config @@ -207,14 +211,16 @@ def test_parse_koji_build_event_start_epel8(koji_build_start_epel8, mock_config) ref="rawhide", ).and_raise(FileNotFoundError, "Not found.") flexmock(PagureProject).should_receive("get_file_content").with_args( - path=".packit.yaml", ref="rawhide" + path=".packit.yaml", + ref="rawhide", ).and_return(packit_yaml) assert event_object.packages_config def test_parse_koji_build_event_completed_old_format( - koji_build_completed_old_format, mock_config + koji_build_completed_old_format, + mock_config, ): event_object = Parser.parse_event(koji_build_completed_old_format) @@ -246,14 +252,16 @@ def test_parse_koji_build_event_completed_old_format( ref="rawhide", ).and_raise(FileNotFoundError, "Not found.") flexmock(PagureProject).should_receive("get_file_content").with_args( - path=".packit.yaml", ref="rawhide" + path=".packit.yaml", + ref="rawhide", ).and_return(packit_yaml) assert event_object.packages_config def test_parse_koji_build_event_completed_rawhide( - koji_build_completed_rawhide, mock_config + koji_build_completed_rawhide, + mock_config, ): event_object = Parser.parse_event(koji_build_completed_rawhide) @@ -288,7 +296,8 @@ def test_parse_koji_build_event_completed_rawhide( ref="rawhide", ).and_raise(FileNotFoundError, "Not found.") flexmock(PagureProject).should_receive("get_file_content").with_args( - path=".packit.yaml", ref="rawhide" + path=".packit.yaml", + ref="rawhide", ).and_return(packit_yaml) assert event_object.packages_config @@ -329,14 +338,16 @@ def test_parse_koji_build_event_completed_f36(koji_build_completed_f36, mock_con ref="rawhide", ).and_raise(FileNotFoundError, "Not found.") flexmock(PagureProject).should_receive("get_file_content").with_args( - path=".packit.yaml", ref="rawhide" + path=".packit.yaml", + ref="rawhide", ).and_return(packit_yaml) assert event_object.packages_config def test_parse_koji_build_event_completed_epel8( - koji_build_completed_epel8, mock_config + koji_build_completed_epel8, + mock_config, ): event_object = Parser.parse_event(koji_build_completed_epel8) @@ -372,7 +383,8 @@ def test_parse_koji_build_event_completed_epel8( ref="rawhide", ).and_raise(FileNotFoundError, "Not found.") flexmock(PagureProject).should_receive("get_file_content").with_args( - path=".packit.yaml", ref="rawhide" + path=".packit.yaml", + ref="rawhide", ).and_return(packit_yaml) assert event_object.packages_config @@ -380,7 +392,7 @@ def test_parse_koji_build_event_completed_epel8( def test_parse_koji_tag_event(koji_build_tagged): flexmock(KojiHelper).should_receive("get_build_info").with_args(1234567).and_return( - {"task_id": 7654321} + {"task_id": 7654321}, ) event_object = Parser.parse_event(koji_build_tagged) diff --git a/tests/unit/events/test_pagure.py b/tests/unit/events/test_pagure.py index 92ca196b2..ebb9e8713 100644 --- a/tests/unit/events/test_pagure.py +++ b/tests/unit/events/test_pagure.py @@ -77,7 +77,7 @@ def test_parse_pagure_pull_request_comment(pagure_pr_comment_added): assert event_object.base_project.full_repo_name == "rpms/python-teamcity-messages" flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).with_args( base_project=None, project=event_object.project, @@ -85,10 +85,10 @@ def test_parse_pagure_pull_request_comment(pagure_pr_comment_added): pr_id=None, fail_when_missing=False, ).and_return( - flexmock(get_package_config_views=lambda: {}) + flexmock(get_package_config_views=lambda: {}), ).once() flexmock(PagureProject).should_receive("get_web_url").and_return( - "https://src.fedoraproject.org/rpms/python-teamcity-messages" + "https://src.fedoraproject.org/rpms/python-teamcity-messages", ) assert event_object.packages_config diff --git a/tests/unit/events/test_testing_farm.py b/tests/unit/events/test_testing_farm.py index 88d82710f..47f7dbf8c 100644 --- a/tests/unit/events/test_testing_farm.py +++ b/tests/unit/events/test_testing_farm.py @@ -40,11 +40,13 @@ def testing_farm_results_error(): @pytest.mark.parametrize("identifier", [None, "foo"]) def test_parse_testing_farm_notification( - testing_farm_notification, testing_farm_results, identifier + testing_farm_notification, + testing_farm_results, + identifier, ): request_id = "129bd474-e4d3-49e0-9dec-d994a99feebc" flexmock(TestingFarmJobHelper).should_receive("get_request_details").with_args( - request_id + request_id, ).and_return(testing_farm_results) flexmock(TFTTestRunTargetModel).should_receive("get_by_pipeline_id").and_return( flexmock( @@ -65,10 +67,10 @@ def test_parse_testing_farm_notification( "specfile_path": "path.spec", "downstream_package_name": "packit", }, - ) + ), ) .once() - .mock() + .mock(), ) event_object = Parser.parse_event(testing_farm_notification) @@ -89,11 +91,12 @@ def test_parse_testing_farm_notification( def test_parse_testing_farm_notification_error( - testing_farm_notification, testing_farm_results_error + testing_farm_notification, + testing_farm_results_error, ): request_id = "129bd474-e4d3-49e0-9dec-d994a99feebc" flexmock(TestingFarmJobHelper).should_receive("get_request_details").with_args( - request_id + request_id, ).and_return(testing_farm_results_error) flexmock(TFTTestRunTargetModel).should_receive("get_by_pipeline_id").and_return( flexmock( @@ -105,7 +108,7 @@ def test_parse_testing_farm_notification_error( .should_receive("get_project_event_object") .and_return(flexmock(pr_id=10)) .once() - .mock() + .mock(), ) event_object = Parser.parse_event(testing_farm_notification) @@ -125,16 +128,18 @@ def test_parse_testing_farm_notification_error( def test_get_project_testing_farm_notification( - testing_farm_notification, testing_farm_results, mock_config + testing_farm_notification, + testing_farm_results, + mock_config, ): request_id = "129bd474-e4d3-49e0-9dec-d994a99feebc" flexmock(TestingFarmJobHelper).should_receive("get_request_details").with_args( - request_id + request_id, ).and_return(testing_farm_results) flexmock(TFTTestRunTargetModel).should_receive("get_by_pipeline_id").with_args( - request_id + request_id, ).and_return( - flexmock(data={"base_project_url": "abc"}, commit_sha="12345", identifier=None) + flexmock(data={"base_project_url": "abc"}, commit_sha="12345", identifier=None), ) event_object = Parser.parse_event(testing_farm_notification) @@ -146,13 +151,14 @@ def test_get_project_testing_farm_notification( def test_json_testing_farm_notification( - testing_farm_notification, testing_farm_results + testing_farm_notification, + testing_farm_results, ): flexmock(TestingFarmJobHelper).should_receive("get_request_details").and_return( - testing_farm_results + testing_farm_results, ) flexmock(TFTTestRunTargetModel).should_receive("get_by_pipeline_id").and_return( - flexmock(data={"base_project_url": "abc"}, commit_sha="12345", identifier=None) + flexmock(data={"base_project_url": "abc"}, commit_sha="12345", identifier=None), ) event_object = Parser.parse_event(testing_farm_notification) assert json.dumps(event_object.pipeline_id) diff --git a/tests/unit/test_allowlist.py b/tests/unit/test_allowlist.py index e24354b83..19d7dd455 100644 --- a/tests/unit/test_allowlist.py +++ b/tests/unit/test_allowlist.py @@ -188,7 +188,10 @@ def mocked_model(allowlist_entries, request): indirect=["mocked_model"], ) def test_is_namespace_or_parent_approved( - allowlist, account_name, mocked_model, is_approved + allowlist, + account_name, + mocked_model, + is_approved, ): assert allowlist.is_namespace_or_parent_approved(account_name) == is_approved @@ -323,17 +326,21 @@ def test_is_denied(allowlist, account_name, mocked_model, is_denied): indirect=["mocked_model"], ) def test_check_and_report_calls_method( - allowlist, event, mocked_model, approved, user_namespace + allowlist, + event, + mocked_model, + approved, + user_namespace, ): gp = GitProject("", GitService(), "") flexmock(DBAllowlist).should_receive("get_namespace").with_args( - user_namespace + user_namespace, ).and_return() flexmock(gp).should_receive("can_merge_pr").with_args(event.actor).and_return( - approved + approved, ) flexmock(Allowlist).should_receive("is_namespace_or_parent_denied").and_return( - False + False, ) mocked_pr_or_issue = flexmock(author=None) if isinstance(event, IssueCommentEvent): @@ -342,7 +349,7 @@ def test_check_and_report_calls_method( flexmock(gp).should_receive("get_pr").and_return(mocked_pr_or_issue) expectation = mocked_pr_or_issue.should_receive("comment").with_args( "Project github.com/foo/bar.git is not on our allowlist! " - "See https://packit.dev/docs/guide/#2-approval" + "See https://packit.dev/docs/guide/#2-approval", ) expectation.never() if approved else expectation.once() @@ -433,7 +440,7 @@ def test_check_and_report_denied_project(allowlist, event): else: flexmock(gp).should_receive("get_pr").and_return(mocked_pr_or_issue) mocked_pr_or_issue.should_receive("comment").with_args( - f"{Allowlist._strip_protocol_and_add_git(event.project_url)} or parent namespaces denied!" + f"{Allowlist._strip_protocol_and_add_git(event.project_url)} or parent namespaces denied!", ).once() ServiceConfig.get_service_config().admins = {"admin"} @@ -602,10 +609,12 @@ def test_check_and_report( GithubProject, create_check_run=lambda *args, **kwargs: None, get_issue=lambda *args, **kwargs: flexmock( - comment=lambda *args, **kwargs: None + comment=lambda *args, **kwargs: None, ), get_pr=lambda *args, **kwargs: flexmock( - source_project=flexmock(), author=None, comment=lambda *args, **kwargs: None + source_project=flexmock(), + author=None, + comment=lambda *args, **kwargs: None, ), ) job_configs = [ @@ -615,24 +624,25 @@ def test_check_and_report( packages={ "package": CommonPackageConfig( _targets=["fedora-rawhide"], - ) + ), }, - ) + ), ] flexmock(PullRequestGithubEvent).should_receive("get_packages_config").and_return( flexmock( jobs=job_configs, get_package_config_for=lambda job_config: flexmock( - packages={"package": {}} + packages={"package": {}}, ), - ) + ), ) _, _ = add_pull_request_event_with_empty_sha git_project = GithubProject("the-repo", GithubService(), "the-namespace") for event, is_valid, resolved_through in events: flexmock( - GithubProject, can_merge_pr=lambda username, is_valid=is_valid: is_valid + GithubProject, + can_merge_pr=lambda username, is_valid=is_valid: is_valid, ) flexmock(event, project=git_project).should_receive("get_dict").and_return(None) # needs to be included when running only `test_allowlist` @@ -640,19 +650,19 @@ def test_check_and_report( # flexmock(job_config_trigger_type=job_configs[0].trigger).mock() # ) flexmock(EventData).should_receive("from_event_dict").and_return( - flexmock(commit_sha="", pr_id="0") + flexmock(commit_sha="", pr_id="0"), ) actor_namespace = ( f"{'github.com' if isinstance(event.project, GithubProject) else 'gitlab.com'}" f"/{event.actor}" ) flexmock(DBAllowlist).should_receive("get_namespace").with_args( - actor_namespace + actor_namespace, ).and_return() if isinstance(event, PullRequestGithubEvent) and not is_valid: notification_project_mock = flexmock() notification_project_mock.should_receive("get_issue_list").with_args( - author="packit-as-a-service[bot]" + author="packit-as-a-service[bot]", ).and_return( [ flexmock(title="something-different"), @@ -661,10 +671,10 @@ def test_check_and_report( url="https://issue.url", ), flexmock(title=""), - ] + ], ) flexmock(ServiceConfig).should_receive("get_project").with_args( - url=NOTIFICATION_REPO + url=NOTIFICATION_REPO, ).and_return(notification_project_mock) # Report the status flexmock(CoprHelper).should_receive("get_copr_client").and_return( @@ -672,11 +682,11 @@ def test_check_and_report( config={ "copr_url": "https://copr.fedorainfracloud.org", "username": "some-owner", - } - ) + }, + ), ) flexmock(LocalProject).should_receive("refresh_the_arguments").and_return( - None + None, ) flexmock(LocalProject).should_receive("checkout_pr").and_return(None) flexmock(StatusReporter).should_receive("report").with_args( @@ -704,10 +714,10 @@ def test_check_and_report( flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( { "fedora-rawhide-x86_64", - } + }, ) flexmock(Allowlist).should_receive("is_namespace_or_parent_denied").and_return( - False + False, ) mock_model(allowlist_entries, resolved_through) @@ -735,7 +745,7 @@ def test_check_and_report_actor_denied_issue(allowlist): ) issue = flexmock() flexmock(issue).should_receive("comment").with_args( - "User namespace bar denied!" + "User namespace bar denied!", ).once() flexmock( GithubProject, @@ -749,23 +759,23 @@ def test_check_and_report_actor_denied_issue(allowlist): packages={ "package": CommonPackageConfig( _targets=["fedora-rawhide"], - ) + ), }, - ) + ), ] git_project = GithubProject("the-repo", GithubService(), "the-namespace") flexmock(event, project=git_project).should_receive("get_dict").and_return(None) flexmock(EventData).should_receive("from_event_dict").and_return( - flexmock(commit_sha="0000000", pr_id="0") + flexmock(commit_sha="0000000", pr_id="0"), ) flexmock(DBAllowlist).should_receive("get_namespace").with_args( - "github.com/bar" + "github.com/bar", ).and_return(flexmock(status=AllowlistStatus.denied)) flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( { "fedora-rawhide-x86_64", - } + }, ) assert ( @@ -779,7 +789,8 @@ def test_check_and_report_actor_denied_issue(allowlist): def test_check_and_report_actor_pull_request( - allowlist, add_pull_request_event_with_empty_sha + allowlist, + add_pull_request_event_with_empty_sha, ): event = PullRequestGithubEvent( action=PullRequestAction.opened, @@ -797,7 +808,9 @@ def test_check_and_report_actor_pull_request( GithubProject, create_check_run=lambda *args, **kwargs: None, get_pr=lambda *args, **kwargs: flexmock( - source_project=flexmock(), author=None, comment=lambda *args, **kwargs: None + source_project=flexmock(), + author=None, + comment=lambda *args, **kwargs: None, ), ) job_configs = [ @@ -807,27 +820,27 @@ def test_check_and_report_actor_pull_request( packages={ "package": CommonPackageConfig( _targets=["fedora-rawhide"], - ) + ), }, - ) + ), ] flexmock(PullRequestGithubEvent).should_receive("get_packages_config").and_return( flexmock( jobs=job_configs, get_package_config_for=lambda job_config: flexmock( - packages={"package": {}} + packages={"package": {}}, ), - ) + ), ) _, _ = add_pull_request_event_with_empty_sha git_project = GithubProject("the-repo", GithubService(), "the-namespace") flexmock(event, project=git_project).should_receive("get_dict").and_return(None) flexmock(EventData).should_receive("from_event_dict").and_return( - flexmock(commit_sha="", pr_id="0") + flexmock(commit_sha="", pr_id="0"), ) flexmock(DBAllowlist).should_receive("get_namespace").with_args( - "github.com/bar" + "github.com/bar", ).and_return(flexmock(status=AllowlistStatus.denied)) flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(None) flexmock(LocalProject).should_receive("checkout_pr").and_return(None) @@ -843,7 +856,7 @@ def test_check_and_report_actor_pull_request( flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( { "fedora-rawhide-x86_64", - } + }, ) assert ( @@ -881,7 +894,11 @@ def test_strip_protocol_and_add_git(url: str, expected_url: str) -> None: ], ) def test_is_github_username_from_fas_account_matching( - sender_login, fas_account_name, person_object, raises, result + sender_login, + fas_account_name, + person_object, + raises, + result, ): flexmock(PackitAPI).should_receive("init_kerberos_ticket").and_return(True) @@ -904,9 +921,10 @@ def init(*args): assert ( Allowlist( - service_config=flexmock() + service_config=flexmock(), ).is_github_username_from_fas_account_matching( - fas_account=fas_account_name, sender_login=sender_login + fas_account=fas_account_name, + sender_login=sender_login, ) is result ) diff --git a/tests/unit/test_babysit_vm_image.py b/tests/unit/test_babysit_vm_image.py index 06732825b..1acb2a87d 100644 --- a/tests/unit/test_babysit_vm_image.py +++ b/tests/unit/test_babysit_vm_image.py @@ -27,25 +27,25 @@ def test_check_pending_vm_image_builds(): flexmock(VMImageBuildTargetModel).should_receive("get_all_by_status").with_args( - VMImageBuildStatus.pending + VMImageBuildStatus.pending, ).and_return( [ flexmock( build_id=1, build_submitted_time=datetime.datetime.utcnow() - datetime.timedelta(days=1), - ) - ] + ), + ], ) flexmock(packit_service.worker.helpers.build.babysit).should_receive( - "update_vm_image_build" + "update_vm_image_build", ).with_args(1, Mock) check_pending_vm_image_builds() def test_check_pending_vm_image_builds_timeout(): flexmock(VMImageBuildTargetModel).should_receive("get_all_by_status").with_args( - VMImageBuildStatus.pending + VMImageBuildStatus.pending, ).and_return( [ flexmock( @@ -54,21 +54,21 @@ def test_check_pending_vm_image_builds_timeout(): - datetime.timedelta(weeks=2), ) .should_receive("set_status") - .mock() - ] + .mock(), + ], ) flexmock(packit_service.worker.helpers.build.babysit).should_receive( - "update_vm_image_build" + "update_vm_image_build", ).never() check_pending_vm_image_builds() def test_check_no_pending_vm_image_builds(): flexmock(VMImageBuildTargetModel).should_receive("get_all_by_status").with_args( - VMImageBuildStatus.pending + VMImageBuildStatus.pending, ).and_return([]) flexmock(packit_service.worker.helpers.build.babysit).should_receive( - "update_vm_image_build" + "update_vm_image_build", ).never() check_pending_vm_image_builds() @@ -102,7 +102,7 @@ def test_check_no_pending_vm_image_builds(): "region": "eu-west-1", }, }, - } + }, }, id="Successfull build", ), @@ -125,7 +125,7 @@ def test_update_vm_image_build(stop_babysitting, build_status, vm_image_builder_ flexmock() .should_receive("image_builder_request") .and_raise(HTTPError("unknown ex")) - .mock() + .mock(), ) else: flexmock(UpdateImageBuildHelper).should_receive("vm_image_builder").and_return( @@ -135,12 +135,12 @@ def test_update_vm_image_build(stop_babysitting, build_status, vm_image_builder_ flexmock() .should_receive("json") .and_return(vm_image_builder_result) - .mock() + .mock(), ) - .mock() + .mock(), ) flexmock(VMImageBuildResultEvent).should_receive( - "job_config_trigger_type" + "job_config_trigger_type", ).and_return(JobConfigTriggerType.pull_request) vm_image_model = ( flexmock( @@ -152,14 +152,14 @@ def test_update_vm_image_build(stop_babysitting, build_status, vm_image_builder_ "downstream_package_name": "package", "specfile_path": "path", "jobs": [ - {"job": "vm_image_build", "trigger": "pull_request"} + {"job": "vm_image_build", "trigger": "pull_request"}, ], - } - ) + }, + ), ) .should_receive("get_project_event_object") .and_return(db_project_object) - .mock() + .mock(), ], ) .should_receive("set_status") @@ -167,10 +167,10 @@ def test_update_vm_image_build(stop_babysitting, build_status, vm_image_builder_ .mock() ) flexmock(VMImageBuildTargetModel).should_receive("get_by_build_id").with_args( - 1 + 1, ).and_return(vm_image_model) flexmock(VMImageBuildTargetModel).should_receive("get_all_by_build_id").with_args( - 1 + 1, ).and_return([vm_image_model]) flexmock(VMImageBuildResultHandler).should_receive("report_status") diff --git a/tests/unit/test_bodhi_update_checks.py b/tests/unit/test_bodhi_update_checks.py index 9c46d7eda..b1498f526 100644 --- a/tests/unit/test_bodhi_update_checks.py +++ b/tests/unit/test_bodhi_update_checks.py @@ -40,13 +40,15 @@ ], ) def test_check_has_author_write_access( - event_type: str, has_write_access: bool, result: bool + event_type: str, + has_write_access: bool, + result: bool, ): package_config = PackageConfig( packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, jobs=[ JobConfig( @@ -55,7 +57,7 @@ def test_check_has_author_write_access( packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, ), ], @@ -66,7 +68,7 @@ def test_check_has_author_write_access( packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, ) data = { @@ -109,7 +111,7 @@ def test_check_is_author_a_packager(author_name: str, is_packager: bool, result: packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, jobs=[ JobConfig( @@ -118,7 +120,7 @@ def test_check_is_author_a_packager(author_name: str, is_packager: bool, result: packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, ), ], @@ -129,7 +131,7 @@ def test_check_is_author_a_packager(author_name: str, is_packager: bool, result: packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, ) data = { @@ -141,7 +143,7 @@ def test_check_is_author_a_packager(author_name: str, is_packager: bool, result: repo="playground-for-pencils", ) flexmock(PackitAPIWithDownstreamMixin).should_receive("is_packager").and_return( - is_packager + is_packager, ) checker = IsAuthorAPackager(package_config, job_config, data) diff --git a/tests/unit/test_bodhi_update_error_msgs.py b/tests/unit/test_bodhi_update_error_msgs.py index a75f2b1a7..7adbafe4e 100644 --- a/tests/unit/test_bodhi_update_error_msgs.py +++ b/tests/unit/test_bodhi_update_error_msgs.py @@ -31,7 +31,7 @@ def package_config__job_config(): packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, jobs=[ JobConfig( @@ -40,7 +40,7 @@ def package_config__job_config(): packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, ), ], @@ -51,7 +51,7 @@ def package_config__job_config(): packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, ) return package_config, job_config @@ -61,10 +61,10 @@ def package_config__job_config(): def package_config__job_config__pull_request_event(package_config__job_config): package_config, job_config = package_config__job_config flexmock(PullRequestCommentPagureEvent).should_receive("commit_sha").and_return( - "abcdef" + "abcdef", ) flexmock(PullRequestCommentPagureEvent).should_receive( - "get_packages_config" + "get_packages_config", ).and_return(package_config) data = PullRequestCommentPagureEvent( pr_id=123, @@ -116,10 +116,10 @@ def test_pull_request_retrigger_bodhi_update_with_koji_data( .mock() ) flexmock(RetriggerBodhiUpdateHandler).should_receive("packit_api").and_return( - packit_api + packit_api, ) flexmock(RetriggerBodhiUpdateHandler).should_receive( - "_get_or_create_bodhi_update_group_model" + "_get_or_create_bodhi_update_group_model", ).and_return( flexmock( grouped_targets=[ @@ -129,9 +129,9 @@ def test_pull_request_retrigger_bodhi_update_with_koji_data( sidetag=None, set_status=lambda x: None, set_data=lambda x: None, - ) - ] - ) + ), + ], + ), ) flexmock(RetriggerBodhiUpdateHandler).should_receive("__next__").and_return( KojiBuildData( @@ -140,7 +140,7 @@ def test_pull_request_retrigger_bodhi_update_with_koji_data( nvr="a_package_1.f36", state=1, task_id=123, - ) + ), ) flexmock(CeleryTask).should_receive("is_last_try").and_return(True) handler = RetriggerBodhiUpdateHandler(package_config, job_config, data, flexmock()) diff --git a/tests/unit/test_build_helper.py b/tests/unit/test_build_helper.py index caffe49d1..3dc58251b 100644 --- a/tests/unit/test_build_helper.py +++ b/tests/unit/test_build_helper.py @@ -56,7 +56,8 @@ def _mock_targets(jobs, job, job_type): return CoprBuildJobHelper( service_config=ServiceConfig.get_service_config(), package_config=PackageConfig( - jobs=jobs, packages={"package": CommonPackageConfig()} + jobs=jobs, + packages={"package": CommonPackageConfig()}, ), job_config=job, # BuildHelper looks at all jobs in the end project=flexmock( @@ -84,9 +85,9 @@ def _mock_targets(jobs, job, job_type): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, - ) + ), ], (JobConfigTriggerType.pull_request, ProjectEventModelType.pull_request), set(STABLE_VERSIONS), @@ -100,9 +101,9 @@ def _mock_targets(jobs, job, job_type): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, - ) + ), ], (JobConfigTriggerType.pull_request, ProjectEventModelType.pull_request), set(STABLE_VERSIONS), @@ -116,9 +117,9 @@ def _mock_targets(jobs, job, job_type): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, - ) + ), ], (JobConfigTriggerType.release, ProjectEventModelType.release), set(STABLE_VERSIONS), @@ -132,9 +133,9 @@ def _mock_targets(jobs, job, job_type): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, - ) + ), ], (JobConfigTriggerType.commit, ProjectEventModelType.branch_push), set(STABLE_VERSIONS), @@ -157,7 +158,7 @@ def _mock_targets(jobs, job, job_type): packages={ "package": CommonPackageConfig( _targets=["different", "os", "target"], - ) + ), }, ), ], @@ -173,7 +174,7 @@ def _mock_targets(jobs, job, job_type): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, ), JobConfig( @@ -182,7 +183,7 @@ def _mock_targets(jobs, job, job_type): packages={ "package": CommonPackageConfig( _targets=["different", "os", "target"], - ) + ), }, ), ], @@ -198,7 +199,7 @@ def _mock_targets(jobs, job, job_type): packages={ "package": CommonPackageConfig( _targets=["different", "os", "target"], - ) + ), }, ), JobConfig( @@ -221,7 +222,7 @@ def _mock_targets(jobs, job, job_type): type=JobType.copr_build, trigger=JobConfigTriggerType.pull_request, packages={"packages": CommonPackageConfig()}, - ) + ), ], (JobConfigTriggerType.pull_request, ProjectEventModelType.pull_request), {"fedora-stable"}, @@ -233,7 +234,7 @@ def _mock_targets(jobs, job, job_type): type=JobType.tests, trigger=JobConfigTriggerType.pull_request, packages={"packages": CommonPackageConfig()}, - ) + ), ], (JobConfigTriggerType.pull_request, ProjectEventModelType.pull_request), {"fedora-stable"}, @@ -247,9 +248,9 @@ def _mock_targets(jobs, job, job_type): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, - ) + ), ], (JobConfigTriggerType.pull_request, ProjectEventModelType.pull_request), set(STABLE_VERSIONS), @@ -280,7 +281,7 @@ def _mock_targets(jobs, job, job_type): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, ), JobConfig( @@ -306,7 +307,7 @@ def _mock_targets(jobs, job, job_type): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, ), ], @@ -327,7 +328,7 @@ def _mock_targets(jobs, job, job_type): packages={ "package": CommonPackageConfig( _targets=list(ONE_CHROOT_SET), - ) + ), }, ), ], @@ -463,7 +464,7 @@ def _mock_targets(jobs, job, job_type): packages={ "package": CommonPackageConfig( _targets=list(ONE_CHROOT_SET), - ) + ), }, ), ], @@ -479,7 +480,7 @@ def _mock_targets(jobs, job, job_type): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, ), JobConfig( @@ -488,7 +489,7 @@ def _mock_targets(jobs, job, job_type): packages={ "package": CommonPackageConfig( _targets=["fedora-rawhide"], - ) + ), }, ), ], @@ -516,7 +517,7 @@ def test_configured_build_targets(jobs, job_type, build_chroots): type=JobType.tests, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], (JobConfigTriggerType.pull_request, ProjectEventModelType.pull_request), {"fedora-stable"}, @@ -530,9 +531,9 @@ def test_configured_build_targets(jobs, job_type, build_chroots): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, - ) + ), ], (JobConfigTriggerType.pull_request, ProjectEventModelType.pull_request), set(STABLE_VERSIONS), @@ -563,7 +564,7 @@ def test_configured_build_targets(jobs, job_type, build_chroots): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, ), JobConfig( @@ -589,7 +590,7 @@ def test_configured_build_targets(jobs, job_type, build_chroots): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, ), ], @@ -610,7 +611,7 @@ def test_configured_build_targets(jobs, job_type, build_chroots): packages={ "package": CommonPackageConfig( _targets=list(ONE_CHROOT_SET), - ) + ), }, ), ], @@ -746,7 +747,7 @@ def test_configured_build_targets(jobs, job_type, build_chroots): packages={ "package": CommonPackageConfig( _targets=list(ONE_CHROOT_SET), - ) + ), }, ), ], @@ -762,7 +763,7 @@ def test_configured_build_targets(jobs, job_type, build_chroots): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, ), JobConfig( @@ -771,7 +772,7 @@ def test_configured_build_targets(jobs, job_type, build_chroots): packages={ "package": CommonPackageConfig( _targets=["fedora-rawhide"], - ) + ), }, ), ], @@ -800,7 +801,8 @@ def test_configured_tests_targets(jobs, job_type, test_chroots): helper = TestingFarmJobHelper( service_config=ServiceConfig.get_service_config(), package_config=PackageConfig( - jobs=jobs, packages={"package": CommonPackageConfig()} + jobs=jobs, + packages={"package": CommonPackageConfig()}, ), job_config=jobs[-1], # test job is always the last in the list project=flexmock( @@ -828,7 +830,7 @@ def test_deduced_copr_targets(): "package": CommonPackageConfig( owner="mf", project="custom-copr-targets", - ) + ), }, ), JobConfig( @@ -861,7 +863,8 @@ def test_deduced_copr_targets(): assert TestingFarmJobHelper( service_config=ServiceConfig.get_service_config(), package_config=PackageConfig( - jobs=jobs, packages={"package": CommonPackageConfig()} + jobs=jobs, + packages={"package": CommonPackageConfig()}, ), job_config=jobs[-1], # BuildHelper looks at all jobs in the end project=flexmock( @@ -878,7 +881,7 @@ def test_deduced_copr_targets(): job_config_trigger_type=job_type[0], project_event_model_type=job_type[1], name="main", - ) + ), ) .mock(), ).configured_tests_targets == {"opensuse-tumbleweed-x86_64"} @@ -896,7 +899,7 @@ def test_deduced_copr_targets(): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, ), JobConfig( @@ -919,9 +922,9 @@ def test_deduced_copr_targets(): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, {"fedora-32-x86_64"}, @@ -937,9 +940,9 @@ def test_deduced_copr_targets(): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, {"fedora-33-x86_64"}, @@ -955,11 +958,11 @@ def test_deduced_copr_targets(): packages={ "package": CommonPackageConfig( _targets={ - "epel-7-x86_64": {"distros": ["centos-7", "rhel-7"]} + "epel-7-x86_64": {"distros": ["centos-7", "rhel-7"]}, }, - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, None, @@ -975,11 +978,11 @@ def test_deduced_copr_targets(): packages={ "package": CommonPackageConfig( _targets={ - "epel-7-x86_64": {"distros": ["centos-7", "rhel-7"]} + "epel-7-x86_64": {"distros": ["centos-7", "rhel-7"]}, }, - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, {"epel-7-x86_64"}, @@ -995,9 +998,9 @@ def test_deduced_copr_targets(): packages={ "package": CommonPackageConfig( _targets=["centos-stream-8"], - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, None, @@ -1013,7 +1016,7 @@ def test_deduced_copr_targets(): packages={ "package": CommonPackageConfig( _targets=["centos-stream-8"], - ) + ), }, ), JobConfig( @@ -1036,9 +1039,9 @@ def test_deduced_copr_targets(): packages={ "package": CommonPackageConfig( _targets=["epel-7-x86_64"], - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, {"epel-7-x86_64"}, @@ -1054,9 +1057,9 @@ def test_deduced_copr_targets(): packages={ "package": CommonPackageConfig( _targets=["epel-7-x86_64"], - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, None, @@ -1072,9 +1075,9 @@ def test_deduced_copr_targets(): packages={ "package": CommonPackageConfig( _targets=["epel-7-ppc64le"], - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, {"epel-7-ppc64le"}, @@ -1090,9 +1093,9 @@ def test_deduced_copr_targets(): packages={ "package": CommonPackageConfig( _targets=["epel-7-ppc64le"], - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, None, @@ -1112,7 +1115,8 @@ def test_build_targets_overrides( copr_build_helper = CoprBuildJobHelper( service_config=ServiceConfig.get_service_config(), package_config=PackageConfig( - jobs=jobs, packages={"package": CommonPackageConfig()} + jobs=jobs, + packages={"package": CommonPackageConfig()}, ), job_config=jobs[-1], # BuildHelper looks at all jobs in the end project=flexmock(), @@ -1125,22 +1129,29 @@ def test_build_targets_overrides( tests_targets_override=tests_targets_override, ) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - "fedora-31", "fedora-32", default=None + "fedora-31", + "fedora-32", + default=None, ).and_return(STABLE_CHROOTS) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - "fedora-32", "fedora-31", default=None + "fedora-32", + "fedora-31", + default=None, ).and_return(STABLE_CHROOTS) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - default=None + default=None, ).and_return(set()) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - "epel-7-x86_64", default=None + "epel-7-x86_64", + default=None, ).and_return({"epel-7-x86_64"}) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - "epel-7-ppc64le", default=None + "epel-7-ppc64le", + default=None, ).and_return({"epel-7-ppc64le"}) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - "centos-stream-8", default=None + "centos-stream-8", + default=None, ).and_return({"centos-stream-8-x86_64"}) assert copr_build_helper.build_targets == build_targets @@ -1157,7 +1168,7 @@ def test_build_targets_overrides( packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, ), JobConfig( @@ -1180,11 +1191,11 @@ def test_build_targets_overrides( packages={ "package": CommonPackageConfig( _targets={ - "epel-7-x86_64": {"distros": ["centos-7", "rhel-7"]} + "epel-7-x86_64": {"distros": ["centos-7", "rhel-7"]}, }, - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, None, @@ -1200,11 +1211,11 @@ def test_build_targets_overrides( packages={ "package": CommonPackageConfig( _targets={ - "epel-7-x86_64": {"distros": ["centos-7", "rhel-7"]} + "epel-7-x86_64": {"distros": ["centos-7", "rhel-7"]}, }, - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, {"epel-7-x86_64"}, @@ -1220,9 +1231,9 @@ def test_build_targets_overrides( packages={ "package": CommonPackageConfig( _targets=["centos-stream-8"], - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, None, @@ -1238,7 +1249,7 @@ def test_build_targets_overrides( packages={ "package": CommonPackageConfig( _targets=["centos-stream-8"], - ) + ), }, ), JobConfig( @@ -1261,9 +1272,9 @@ def test_build_targets_overrides( packages={ "package": CommonPackageConfig( _targets=["epel-7-x86_64"], - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, {"epel-7-x86_64"}, @@ -1279,9 +1290,9 @@ def test_build_targets_overrides( packages={ "package": CommonPackageConfig( _targets=["epel-7-x86_64"], - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, None, @@ -1297,9 +1308,9 @@ def test_build_targets_overrides( packages={ "package": CommonPackageConfig( _targets=["epel-7-ppc64le"], - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, {"epel-7-ppc64le"}, @@ -1315,9 +1326,9 @@ def test_build_targets_overrides( packages={ "package": CommonPackageConfig( _targets=["epel-7-ppc64le"], - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, None, @@ -1333,9 +1344,9 @@ def test_build_targets_overrides( packages={ "package": CommonPackageConfig( _targets=["epel-7-x86_64"], - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, {"fedora-rawhide-x86_64"}, @@ -1355,7 +1366,8 @@ def test_tests_targets_overrides( testing_farm_helper = TestingFarmJobHelper( service_config=ServiceConfig.get_service_config(), package_config=PackageConfig( - jobs=jobs, packages={"package": CommonPackageConfig()} + jobs=jobs, + packages={"package": CommonPackageConfig()}, ), job_config=jobs[-1], # BuildHelper looks at all jobs in the end project=flexmock(), @@ -1368,22 +1380,29 @@ def test_tests_targets_overrides( tests_targets_override=tests_targets_override, ) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - "fedora-31", "fedora-32", default=None + "fedora-31", + "fedora-32", + default=None, ).and_return(STABLE_CHROOTS) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - "fedora-32", "fedora-31", default=None + "fedora-32", + "fedora-31", + default=None, ).and_return(STABLE_CHROOTS) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - default=None + default=None, ).and_return(set()) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - "epel-7-x86_64", default=None + "epel-7-x86_64", + default=None, ).and_return({"epel-7-x86_64"}) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - "epel-7-ppc64le", default=None + "epel-7-ppc64le", + default=None, ).and_return({"epel-7-ppc64le"}) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - "centos-stream-8", default=None + "centos-stream-8", + default=None, ).and_return({"centos-stream-8-x86_64"}) assert testing_farm_helper.tests_targets == test_targets @@ -1443,7 +1462,10 @@ def test_tests_targets_overrides( ], ) def test_copr_build_target2test_targets( - configured_targets, use_internal_tf, build_target, test_targets + configured_targets, + use_internal_tf, + build_target, + test_targets, ): jobs = [ JobConfig( @@ -1453,14 +1475,15 @@ def test_copr_build_target2test_targets( "package": CommonPackageConfig( _targets=configured_targets, use_internal_tf=use_internal_tf, - ) + ), }, - ) + ), ] copr_build_helper = CoprBuildJobHelper( service_config=ServiceConfig.get_service_config(), package_config=PackageConfig( - jobs=jobs, packages={"package": CommonPackageConfig()} + jobs=jobs, + packages={"package": CommonPackageConfig()}, ), job_config=jobs[0], project=flexmock(), @@ -1488,7 +1511,7 @@ def test_copr_build_and_test_targets_both_jobs_defined(): "epel-8-x86_64": {}, "fedora-35-x86_64": {"distros": ["fedora-35", "fedora-36"]}, }, - ) + ), }, ), JobConfig( @@ -1497,7 +1520,7 @@ def test_copr_build_and_test_targets_both_jobs_defined(): packages={ "package": CommonPackageConfig( _targets=["fedora-35", "fedora-36", "epel-8"], - ) + ), }, ), ] @@ -1511,7 +1534,8 @@ def test_copr_build_and_test_targets_both_jobs_defined(): helper = helper( service_config=ServiceConfig.get_service_config(), package_config=PackageConfig( - jobs=jobs, packages={"package": CommonPackageConfig()} + jobs=jobs, + packages={"package": CommonPackageConfig()}, ), job_config=jobs[i], project=flexmock(), @@ -1519,12 +1543,13 @@ def test_copr_build_and_test_targets_both_jobs_defined(): db_project_event=flexmock() .should_receive("get_project_event_object") .and_return( - flexmock(job_config_trigger_type=JobConfigTriggerType.pull_request) + flexmock(job_config_trigger_type=JobConfigTriggerType.pull_request), ) .mock(), ) assert helper.build_target2test_targets_for_test_job( - "fedora-35-x86_64", jobs[0] + "fedora-35-x86_64", + jobs[0], ) == { "fedora-35-x86_64", "fedora-36-x86_64", @@ -1534,7 +1559,8 @@ def test_copr_build_and_test_targets_both_jobs_defined(): == set() ) assert helper.build_target2test_targets_for_test_job( - "epel-8-x86_64", jobs[0] + "epel-8-x86_64", + jobs[0], ) == {"centos-stream-8-x86_64"} assert helper.build_targets == { "fedora-35-x86_64", @@ -1564,9 +1590,9 @@ def test_copr_build_and_test_targets_both_jobs_defined(): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, - ) + ), ], "fedora-32-x86_64", "fedora-32-x86_64", @@ -1580,11 +1606,11 @@ def test_copr_build_and_test_targets_both_jobs_defined(): packages={ "package": CommonPackageConfig( _targets={ - "epel-7-x86_64": {"distros": ["centos-7", "rhel-7"]} + "epel-7-x86_64": {"distros": ["centos-7", "rhel-7"]}, }, - ) + ), }, - ) + ), ], "centos-7-x86_64", "epel-7-x86_64", @@ -1598,11 +1624,11 @@ def test_copr_build_and_test_targets_both_jobs_defined(): packages={ "package": CommonPackageConfig( _targets={ - "epel-7-x86_64": {"distros": ["centos-7", "rhel-7"]} + "epel-7-x86_64": {"distros": ["centos-7", "rhel-7"]}, }, - ) + ), }, - ) + ), ], "rhel-7-x86_64", "epel-7-x86_64", @@ -1616,11 +1642,11 @@ def test_copr_build_and_test_targets_both_jobs_defined(): packages={ "package": CommonPackageConfig( _targets={ - "epel-7-x86_64": {"distros": ["centos-7", "rhel-7"]} + "epel-7-x86_64": {"distros": ["centos-7", "rhel-7"]}, }, - ) + ), }, - ) + ), ], "rhel-7-x86_64", "epel-7-x86_64", @@ -1634,9 +1660,9 @@ def test_copr_build_and_test_targets_both_jobs_defined(): packages={ "package": CommonPackageConfig( _targets=["epel-7-x86_64"], - ) + ), }, - ) + ), ], "centos-7-x86_64", "epel-7-x86_64", @@ -1651,9 +1677,9 @@ def test_copr_build_and_test_targets_both_jobs_defined(): "package": CommonPackageConfig( _targets=["epel-7-x86_64"], use_internal_tf=True, - ) + ), }, - ) + ), ], "rhel-7-x86_64", "epel-7-x86_64", @@ -1667,9 +1693,9 @@ def test_copr_build_and_test_targets_both_jobs_defined(): packages={ "package": CommonPackageConfig( _targets=["centos-stream-9-x86_64"], - ) + ), }, - ) + ), ], "centos-stream-9-x86_64", "centos-stream-9-x86_64", @@ -1688,7 +1714,7 @@ def test_copr_build_and_test_targets_both_jobs_defined(): packages={ "package": CommonPackageConfig( _targets=["centos-stream-9-x86_64"], - ) + ), }, ), ], @@ -1705,9 +1731,9 @@ def test_copr_build_and_test_targets_both_jobs_defined(): "package": CommonPackageConfig( _targets=["centos-stream-9-x86_64"], use_internal_tf=True, - ) + ), }, - ) + ), ], "centos-stream-9-x86_64", "centos-stream-9-x86_64", @@ -1720,7 +1746,8 @@ def test_copr_test_target2build_target(job_config, test_target, build_target): testing_farm_helper = TestingFarmJobHelper( service_config=ServiceConfig.get_service_config(), package_config=PackageConfig( - jobs=jobs, packages={"package": CommonPackageConfig()} + jobs=jobs, + packages={"package": CommonPackageConfig()}, ), job_config=jobs[0], project=flexmock(), @@ -1731,16 +1758,22 @@ def test_copr_test_target2build_target(job_config, test_target, build_target): .mock(), ) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - "fedora-31", "fedora-32", default=None + "fedora-31", + "fedora-32", + default=None, ).and_return(STABLE_CHROOTS) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - "fedora-32", "fedora-31", default=None + "fedora-32", + "fedora-31", + default=None, ).and_return(STABLE_CHROOTS) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - "centos-stream-9-x86_64", default=None + "centos-stream-9-x86_64", + default=None, ).and_return({"centos-stream-9-x86_64"}) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - "epel-7-x86_64", default=None + "epel-7-x86_64", + default=None, ).and_return({"epel-7-x86_64"}) assert testing_farm_helper.test_target2build_target(test_target) == build_target @@ -1756,9 +1789,9 @@ def test_copr_test_target2build_target(job_config, test_target, build_target): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, {"f32"}, @@ -1773,9 +1806,9 @@ def test_copr_test_target2build_target(job_config, test_target, build_target): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, {"f33"}, @@ -1785,12 +1818,16 @@ def test_copr_test_target2build_target(job_config, test_target, build_target): ], ) def test_koji_targets_overrides( - jobs, job_config_trigger_type, targets_override, build_targets + jobs, + job_config_trigger_type, + targets_override, + build_targets, ): koji_build_helper = KojiBuildJobHelper( service_config=ServiceConfig.get_service_config(), package_config=PackageConfig( - jobs=jobs, packages={"package": CommonPackageConfig()} + jobs=jobs, + packages={"package": CommonPackageConfig()}, ), job_config=jobs[0], project=flexmock(), @@ -1813,7 +1850,7 @@ def test_koji_targets_overrides( type=JobType.copr_build, trigger=JobConfigTriggerType.pull_request, packages={"packages": CommonPackageConfig()}, - ) + ), ], JobConfig( type=JobType.copr_build, @@ -1835,7 +1872,7 @@ def test_koji_targets_overrides( type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"packages": CommonPackageConfig()}, - ) + ), ], JobConfig( type=JobType.build, @@ -1857,7 +1894,7 @@ def test_koji_targets_overrides( type=JobType.copr_build, trigger=JobConfigTriggerType.pull_request, packages={"packages": CommonPackageConfig()}, - ) + ), ], JobConfig( type=JobType.copr_build, @@ -1879,7 +1916,7 @@ def test_koji_targets_overrides( type=JobType.copr_build, trigger=JobConfigTriggerType.release, packages={"packages": CommonPackageConfig()}, - ) + ), ], JobConfig( type=JobType.copr_build, @@ -1901,7 +1938,7 @@ def test_koji_targets_overrides( type=JobType.copr_build, trigger=JobConfigTriggerType.commit, packages={"packages": CommonPackageConfig()}, - ) + ), ], JobConfig( type=JobType.copr_build, @@ -2004,7 +2041,7 @@ def test_koji_targets_overrides( type=JobType.tests, trigger=JobConfigTriggerType.pull_request, packages={"packages": CommonPackageConfig()}, - ) + ), ], JobConfig( type=JobType.tests, @@ -2205,7 +2242,8 @@ def test_build_handler_job_and_test_properties( copr_build_helper = CoprBuildJobHelper( service_config=ServiceConfig.get_service_config(), package_config=PackageConfig( - jobs=jobs, packages={"package": CommonPackageConfig()} + jobs=jobs, + packages={"package": CommonPackageConfig()}, ), job_config=init_job, project=flexmock(default_branch="main"), @@ -2231,7 +2269,7 @@ def test_build_handler_job_and_test_properties( type=JobType.copr_build, trigger=JobConfigTriggerType.pull_request, packages={"packages": CommonPackageConfig()}, - ) + ), ], JobConfigTriggerType.pull_request, ProjectEventModelType.pull_request, @@ -2248,9 +2286,9 @@ def test_build_handler_job_and_test_properties( packages={ "package": CommonPackageConfig( owner="custom-owner", - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, ProjectEventModelType.pull_request, @@ -2267,9 +2305,9 @@ def test_build_handler_job_and_test_properties( packages={ "package": CommonPackageConfig( project="custom-project", - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, ProjectEventModelType.pull_request, @@ -2287,9 +2325,9 @@ def test_build_handler_job_and_test_properties( "package": CommonPackageConfig( owner="custom-owner", project="custom-project", - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, ProjectEventModelType.pull_request, @@ -2307,9 +2345,9 @@ def test_build_handler_job_and_test_properties( "package": CommonPackageConfig( owner="custom-owner", project="custom-project", - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, ProjectEventModelType.pull_request, @@ -2324,7 +2362,7 @@ def test_build_handler_job_and_test_properties( type=JobType.copr_build, trigger=JobConfigTriggerType.commit, packages={"packages": CommonPackageConfig()}, - ) + ), ], JobConfigTriggerType.commit, ProjectEventModelType.branch_push, @@ -2339,7 +2377,7 @@ def test_build_handler_job_and_test_properties( type=JobType.copr_build, trigger=JobConfigTriggerType.release, packages={"packages": CommonPackageConfig()}, - ) + ), ], JobConfigTriggerType.release, ProjectEventModelType.release, @@ -2354,7 +2392,7 @@ def test_build_handler_job_and_test_properties( type=JobType.copr_build, trigger=JobConfigTriggerType.release, packages={"packages": CommonPackageConfig()}, - ) + ), ], JobConfigTriggerType.release, ProjectEventModelType.release, @@ -2372,7 +2410,7 @@ def test_build_handler_job_and_test_properties( "package": CommonPackageConfig( owner="commit-owner", project="commit-project", - ) + ), }, ), JobConfig( @@ -2382,7 +2420,7 @@ def test_build_handler_job_and_test_properties( "package": CommonPackageConfig( owner="pr-owner", project="pr-project", - ) + ), }, ), ], @@ -2422,7 +2460,7 @@ def test_build_handler_job_and_test_properties( "package": CommonPackageConfig( owner="custom-owner", project="custom-project", - ) + ), }, ), JobConfig( @@ -2452,7 +2490,7 @@ def test_build_handler_job_and_test_properties( "package": CommonPackageConfig( owner="custom-owner", project="custom-project", - ) + ), }, ), ], @@ -2472,7 +2510,7 @@ def test_build_handler_job_and_test_properties( "package": CommonPackageConfig( owner="pr-owner", project="pr-project", - ) + ), }, ), JobConfig( @@ -2487,7 +2525,7 @@ def test_build_handler_job_and_test_properties( "package": CommonPackageConfig( owner="commit-owner", project="commit-project", - ) + ), }, ), ], @@ -2507,7 +2545,7 @@ def test_build_handler_job_and_test_properties( "package": CommonPackageConfig( owner="pr-owner", project="pr-project", - ) + ), }, ), JobConfig( @@ -2522,7 +2560,7 @@ def test_build_handler_job_and_test_properties( "package": CommonPackageConfig( owner="commit-owner", project="commit-project", - ) + ), }, ), ], @@ -2546,7 +2584,8 @@ def test_copr_project_and_namespace( copr_build_helper = CoprBuildJobHelper( service_config=ServiceConfig.get_service_config(), package_config=PackageConfig( - jobs=jobs, packages={"package": CommonPackageConfig()} + jobs=jobs, + packages={"package": CommonPackageConfig()}, ), job_config=jobs[0], # BuildHelper looks at all jobs in the end project=flexmock( @@ -2556,7 +2595,9 @@ def test_copr_project_and_namespace( default_branch="main", ), metadata=flexmock( - pr_id=None, identifier="the-event-identifier", tag_name=tag_name + pr_id=None, + identifier="the-event-identifier", + tag_name=tag_name, ), db_project_event=flexmock() .should_receive("get_project_event_object") @@ -2565,12 +2606,12 @@ def test_copr_project_and_namespace( job_config_trigger_type=job_config_trigger_type, project_event_model_type=project_event_model_type, name="main", - ) + ), ) .mock(), ) copr_build_helper._api = flexmock( - copr_helper=flexmock(copr_client=flexmock(config={"username": "nobody"})) + copr_helper=flexmock(copr_client=flexmock(config={"username": "nobody"})), ) assert copr_build_helper.job_project == job_project @@ -2588,7 +2629,7 @@ def test_copr_project_and_namespace( "package": CommonPackageConfig( owner="the-owner", project="the-project", - ) + ), }, ), "", @@ -2603,7 +2644,7 @@ def test_copr_project_and_namespace( "package": CommonPackageConfig( owner="the-owner", project="the-project", - ) + ), }, ), "something/different", @@ -2618,7 +2659,7 @@ def test_copr_project_and_namespace( "package": CommonPackageConfig( owner="the-owner", project="the-project", - ) + ), }, ), "git.instance.io/the/example/namespace/the-example-repo", @@ -2633,7 +2674,7 @@ def test_copr_project_and_namespace( "package": CommonPackageConfig( owner="the-owner", project="the-project", - ) + ), }, ), "something/different\ngit.instance.io/the/example/namespace/the-example-repo", @@ -2651,14 +2692,16 @@ def test_check_if_custom_copr_can_be_used_and_report( copr_build_helper = CoprBuildJobHelper( service_config=service_config, package_config=PackageConfig( - jobs=[job], packages={"package": CommonPackageConfig()} + jobs=[job], + packages={"package": CommonPackageConfig()}, ), job_config=job, # BuildHelper looks at all jobs in the end project=flexmock( namespace="the/example/namespace", repo="the-example-repo", service=flexmock( - instance_url="https://git.instance.io", hostname="git.instance.io" + instance_url="https://git.instance.io", + hostname="git.instance.io", ), ), metadata=flexmock(pr_id=None, identifier="the-event-identifier", tag_name=None), @@ -2668,7 +2711,7 @@ def test_check_if_custom_copr_can_be_used_and_report( flexmock( job_config_trigger_type=JobConfigTriggerType.pull_request, project_event_model_type=ProjectEventModelType.pull_request, - ) + ), ) .mock(), ) @@ -2677,17 +2720,18 @@ def test_check_if_custom_copr_can_be_used_and_report( config={"username": "nobody"}, project_proxy=flexmock( get=lambda owner, project: { - "packit_forge_projects_allowed": git_forge_allowed_list - } + "packit_forge_projects_allowed": git_forge_allowed_list, + }, ), - ) + ), ) copr_helper.should_receive("get_copr_settings_url").with_args( - "the-owner", "the-project" + "the-owner", + "the-project", ).and_return().times(0 if allowed else 1) copr_build_helper._api = flexmock(copr_helper=copr_helper) flexmock(CoprBuildJobHelper).should_receive("report_status_to_build").times( - 0 if allowed else 1 + 0 if allowed else 1, ) assert copr_build_helper.check_if_custom_copr_can_be_used_and_report() is allowed @@ -2703,9 +2747,9 @@ def test_check_if_custom_copr_can_be_used_and_report( packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, - ) + ), ], JobConfigTriggerType.pull_request, set(STABLE_VERSIONS), @@ -2721,9 +2765,9 @@ def test_check_if_custom_copr_can_be_used_and_report( "package": CommonPackageConfig( _targets=STABLE_VERSIONS, branch="build-branch", - ) + ), }, - ) + ), ], JobConfigTriggerType.commit, set(STABLE_VERSIONS), @@ -2739,9 +2783,9 @@ def test_check_if_custom_copr_can_be_used_and_report( "package": CommonPackageConfig( _targets=STABLE_VERSIONS, branch="build-branch", - ) + ), }, - ) + ), ], JobConfigTriggerType.release, set(STABLE_VERSIONS), @@ -2751,13 +2795,17 @@ def test_check_if_custom_copr_can_be_used_and_report( ], ) def test_targets_for_koji_build( - jobs, job_config_trigger_type, build_targets, koji_targets + jobs, + job_config_trigger_type, + build_targets, + koji_targets, ): pr_id = 41 if job_config_trigger_type == JobConfigTriggerType.pull_request else None koji_build_helper = KojiBuildJobHelper( service_config=ServiceConfig.get_service_config(), package_config=PackageConfig( - jobs=jobs, packages={"package": CommonPackageConfig()} + jobs=jobs, + packages={"package": CommonPackageConfig()}, ), job_config=jobs[0], project=flexmock(), @@ -2766,8 +2814,9 @@ def test_targets_for_koji_build( .should_receive("get_project_event_object") .and_return( flexmock( - job_config_trigger_type=job_config_trigger_type, name="build-branch" - ) + job_config_trigger_type=job_config_trigger_type, + name="build-branch", + ), ) .mock(), ) @@ -2795,9 +2844,9 @@ def test_repository_cache_invocation(): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, - ) + ), ], packages={"package": CommonPackageConfig()}, ), @@ -2807,13 +2856,13 @@ def test_repository_cache_invocation(): packages={ "package": CommonPackageConfig( _targets=STABLE_VERSIONS, - ) + ), }, ), project=flexmock( service=flexmock(), get_git_urls=lambda: { - "git": "https://github.com/some-namespace/some-repo.git" + "git": "https://github.com/some-namespace/some-repo.git", }, repo=flexmock(), namespace=flexmock(), @@ -2827,12 +2876,13 @@ def test_repository_cache_invocation(): flexmock(RepositoryCache).should_call("__init__").once() flexmock(RepositoryCache).should_receive("get_repo").with_args( - "https://github.com/some-namespace/some-repo.git", directory="/tmp/some-dir" + "https://github.com/some-namespace/some-repo.git", + directory="/tmp/some-dir", ).and_return( flexmock( git=flexmock().should_receive("checkout").and_return().mock(), commit=lambda: "commit", - ) + ), ).once() assert copr_build_helper.local_project @@ -2843,12 +2893,13 @@ def test_local_project_not_called_when_initializing_api(): type=JobType.copr_build, trigger=JobConfigTriggerType.pull_request, packages={"packages": CommonPackageConfig()}, - ) + ), ] copr_build_helper = CoprBuildJobHelper( service_config=ServiceConfig.get_service_config(), package_config=PackageConfig( - jobs=jobs, packages={"package": CommonPackageConfig()} + jobs=jobs, + packages={"package": CommonPackageConfig()}, ), job_config=jobs[0], project=flexmock(), @@ -2918,17 +2969,18 @@ def test_notify_about_failure_if_configured(failure_comment, kwargs, result_comm "packages": CommonPackageConfig( notifications=NotificationsConfig( failure_comment=FailureCommentNotificationsConfig( - failure_comment - ) - ) - ) + failure_comment, + ), + ), + ), }, - ) + ), ] copr_build_helper = CoprBuildJobHelper( service_config=ServiceConfig.get_service_config(), package_config=PackageConfig( - jobs=jobs, packages={"package": CommonPackageConfig()} + jobs=jobs, + packages={"package": CommonPackageConfig()}, ), job_config=jobs[0], project=flexmock(), diff --git a/tests/unit/test_checkers.py b/tests/unit/test_checkers.py index 05ee62e95..986e83438 100644 --- a/tests/unit/test_checkers.py +++ b/tests/unit/test_checkers.py @@ -144,13 +144,15 @@ def test_koji_permissions(success, event, is_scratch, can_merge_pr, trigger): flexmock(ConfigFromEventMixin).should_receive("project").and_return(git_project) db_project_object = flexmock( - job_config_trigger_type=trigger, name=event["git_ref"], pr_id=1 + job_config_trigger_type=trigger, + name=event["git_ref"], + pr_id=1, ) flexmock(EventData).should_receive("db_project_event").and_return( flexmock() .should_receive("get_project_event_object") .and_return(db_project_object) - .mock() + .mock(), ) if not success: @@ -219,7 +221,7 @@ def test_branch_push_event_checker(success, event, trigger, checker_kls): flexmock() .should_receive("get_project_event_object") .and_return(db_project_object) - .mock() + .mock(), ) checker = checker_kls(package_config, job_config, event) @@ -290,7 +292,7 @@ def test_pr_event_checker(configured_branch, success, event, trigger, checker_kl flexmock() .should_receive("get_project_event_object") .and_return(db_project_object) - .mock() + .mock(), ) checker = checker_kls(package_config, job_config, event) @@ -352,7 +354,7 @@ def test_vm_image_is_copr_build_ok_for_chroot( flexmock(CoprBuildTargetModel).should_receive("get_all_by").and_return(copr_builds) flexmock(EventData).should_receive("_add_project_object_and_event").and_return() flexmock(CoprHelper).should_receive("copr_client").and_return( - flexmock(config=flexmock().should_receive("get").and_return("packit").mock()) + flexmock(config=flexmock().should_receive("get").and_return("packit").mock()), ) checker = IsCoprBuildForChrootOk( @@ -375,7 +377,7 @@ def test_vm_image_is_copr_build_ok_for_chroot( if error_msg: flexmock(checker).should_receive("report_pre_check_failure").with_args( - error_msg + error_msg, ).once() assert checker.pre_check() == success @@ -390,11 +392,11 @@ def test_copr_build_is_package_matching_job_view(): packages={"package-a": CommonPackageConfig()}, ), "package-a", - ) + ), ] flexmock(AbstractCoprBuildEvent).should_receive("from_event_dict").and_return( - flexmock(build_id=123) + flexmock(build_id=123), ) checker = IsPackageMatchingJobView( @@ -429,7 +431,9 @@ def test_copr_build_is_package_matching_job_view(): ), ) def test_vm_image_has_author_write_access( - fake_package_config_job_config_project_db_trigger, has_write_access, result + fake_package_config_job_config_project_db_trigger, + has_write_access, + result, ): package_config, job_config, _, _ = fake_package_config_job_config_project_db_trigger @@ -446,13 +450,13 @@ def test_vm_image_has_author_write_access( ) flexmock(ServiceConfig).should_receive("get_project").with_args( - url=project_url + url=project_url, ).and_return( flexmock(repo="repo", namespace="ns") .should_receive("has_write_access") .with_args(user=actor) .and_return(has_write_access) - .mock() + .mock(), ) if not has_write_access: @@ -495,7 +499,7 @@ def test_koji_branch_merge_queue(): flexmock() .should_receive("get_project_event_object") .and_return(db_project_object) - .mock() + .mock(), ) checker = IsJobConfigTriggerMatchingKoji(package_config, job_config, event) @@ -568,11 +572,13 @@ def test_tf_comment_identifier(comment, result): flexmock() .should_receive("get_project_event_object") .and_return(db_project_object) - .mock() + .mock(), ) checker = IsIdentifierFromCommentMatching( - package_config=package_config, job_config=job_config, event=event + package_config=package_config, + job_config=job_config, + event=event, ) assert checker.pre_check() == result @@ -619,7 +625,10 @@ def test_tf_comment_identifier(comment, result): ), ) def test_tf_comment_default_identifier( - comment, default_identifier, job_identifier, result + comment, + default_identifier, + job_identifier, + result, ): """ Check that Testing Farm checker for comment attributes works properly. @@ -634,7 +643,8 @@ def test_tf_comment_default_identifier( packages={"package": CommonPackageConfig()}, identifier=job_identifier, test_command=TestCommandConfig( - default_labels=None, default_identifier=default_identifier + default_labels=None, + default_identifier=default_identifier, ), ) @@ -657,11 +667,13 @@ def test_tf_comment_default_identifier( flexmock() .should_receive("get_project_event_object") .and_return(db_project_object) - .mock() + .mock(), ) checker = IsIdentifierFromCommentMatching( - package_config=package_config, job_config=job_config, event=event + package_config=package_config, + job_config=job_config, + event=event, ) assert checker.pre_check() == result @@ -722,11 +734,13 @@ def test_tf_comment_labels(comment, result): flexmock() .should_receive("get_project_event_object") .and_return(db_project_object) - .mock() + .mock(), ) checker = IsLabelFromCommentMatching( - package_config=package_config, job_config=job_config, event=event + package_config=package_config, + job_config=job_config, + event=event, ) assert checker.pre_check() == result @@ -787,7 +801,8 @@ def test_tf_comment_default_labels(comment, default_labels, job_labels, result): identifier="my-id-1", labels=job_labels, test_command=TestCommandConfig( - default_labels=default_labels, default_identifier=None + default_labels=default_labels, + default_identifier=None, ), ) @@ -810,11 +825,13 @@ def test_tf_comment_default_labels(comment, default_labels, job_labels, result): flexmock() .should_receive("get_project_event_object") .and_return(db_project_object) - .mock() + .mock(), ) checker = IsLabelFromCommentMatching( - package_config=package_config, job_config=job_config, event=event + package_config=package_config, + job_config=job_config, + event=event, ) assert checker.pre_check() == result @@ -873,11 +890,13 @@ def test_tf_comment_labels_none_in_config(comment, result): flexmock() .should_receive("get_project_event_object") .and_return(db_project_object) - .mock() + .mock(), ) checker = IsLabelFromCommentMatching( - package_config=package_config, job_config=job_config, event=event + package_config=package_config, + job_config=job_config, + event=event, ) assert checker.pre_check() == result @@ -965,15 +984,17 @@ def test_koji_check_allowed_accounts( should_pass, ): flexmock(PagureProject).should_receive("get_users_with_given_access").with_args( - [AccessLevel.maintain] + [AccessLevel.maintain], ).and_return({"admin-1"}) flexmock(PagureService).should_receive("get_group").with_args("copr").and_return( - flexmock(members={"group-account-1"}) + flexmock(members={"group-account-1"}), ) assert ( DistgitAccountsChecker( - distgit_push_event.project, allowed_pr_authors, account + distgit_push_event.project, + allowed_pr_authors, + account, ).check_allowed_accounts() == should_pass ) @@ -1012,9 +1033,9 @@ def test_labels_on_distgit_pr( LabelRequirementsConfig( absent=labels_absent, present=labels_present, - ) + ), ), - ) + ), }, ), ] @@ -1032,11 +1053,13 @@ def test_labels_on_distgit_pr( status=PRStatus.open, labels=pr_labels, target_branch="f36", - ) + ), ) checker = LabelsOnDistgitPR( - package_config, job_config, distgit_push_event.get_dict() + package_config, + job_config, + distgit_push_event.get_dict(), ) assert checker.pre_check() == should_pass @@ -1063,8 +1086,9 @@ def test_allowed_builders_for_bodhi( trigger=JobConfigTriggerType.commit, packages={ "package": CommonPackageConfig( - dist_git_branches=["f36"], allowed_builders=allowed_builders - ) + dist_git_branches=["f36"], + allowed_builders=allowed_builders, + ), }, ), ] @@ -1076,7 +1100,9 @@ def test_allowed_builders_for_bodhi( job_config = jobs[0] checker = IsKojiBuildOwnerMatchingConfiguration( - package_config, job_config, koji_build_completed_event.get_dict() + package_config, + job_config, + koji_build_completed_event.get_dict(), ) assert checker.pre_check() == should_pass @@ -1091,14 +1117,15 @@ def test_allowed_builders_for_bodhi_alias( trigger=JobConfigTriggerType.commit, packages={ "package": CommonPackageConfig( - dist_git_branches=["f36"], allowed_builders=["all_admins"] - ) + dist_git_branches=["f36"], + allowed_builders=["all_admins"], + ), }, ), ] flexmock(PagureProject).should_receive("get_users_with_given_access").and_return( - ["owner"] + ["owner"], ) package_config = PackageConfig( @@ -1108,6 +1135,8 @@ def test_allowed_builders_for_bodhi_alias( job_config = jobs[0] checker = IsKojiBuildOwnerMatchingConfiguration( - package_config, job_config, koji_build_completed_event.get_dict() + package_config, + job_config, + koji_build_completed_event.get_dict(), ) assert checker.pre_check() diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py index 802235a64..1b82f235d 100644 --- a/tests/unit/test_config.py +++ b/tests/unit/test_config.py @@ -92,7 +92,7 @@ def test_parse_optional_values(service_config_valid): **service_config_valid, "testing_farm_api_url": "https://other.url", "package_config_path_override": ".distro/source-git.yaml", - } + }, ) assert config.testing_farm_api_url == "https://other.url" assert config.package_config_path_override == ".distro/source-git.yaml" @@ -106,7 +106,7 @@ def service_config_invalid(): "github.com": { "github_app_id": "11111", "github_app_cert_path": "/path/lib", - } + }, }, "webhook_secret": "secret", "command_handler_work_dir": "/sandcastle", @@ -196,7 +196,7 @@ def test_get_package_config_from_repo( package_config_path, ): flexmock(ServiceConfig).should_receive("get_service_config").and_return( - flexmock(package_config_path_override=package_config_path) + flexmock(package_config_path_override=package_config_path), ).once() flexmock(config).should_receive("get_package_config_from_repo").with_args( project=(base_project or project), @@ -224,7 +224,9 @@ def test_get_package_config_from_repo_not_found_exception_pr(): """ project = flexmock(full_repo_name="packit/packit") flexmock(config).should_receive("get_package_config_from_repo").with_args( - project=project, ref=None, package_config_path=None + project=project, + ref=None, + package_config_path=None, ).once().and_return(None) pr = flexmock() project.should_receive("get_pr").with_args(2).once().and_return(pr) @@ -240,7 +242,7 @@ def test_get_package_config_from_repo_not_found_exception_pr(): def test_get_package_config_from_repo_not_found(): """Don't fail when config is not found.""" flexmock(config).should_receive("get_package_config_from_repo").once().and_return( - None + None, ) assert ( PackageConfigGetter.get_package_config_from_repo( @@ -255,10 +257,14 @@ def test_get_package_config_from_repo_not_found(): def test_get_package_config_from_repo_not_found_exception_create_issue(): project = flexmock(full_repo_name="packit/packit") flexmock(config).should_receive("get_package_config_from_repo").with_args( - project=project, ref=None, package_config_path=None + project=project, + ref=None, + package_config_path=None, ).once().and_return(None) flexmock(PackageConfigGetter).should_receive("create_issue_if_needed").with_args( - project, title=str, message=str + project, + title=str, + message=str, ).once() with pytest.raises(PackitConfigException): PackageConfigGetter.get_package_config_from_repo( @@ -325,7 +331,11 @@ def test_get_package_config_from_repo_not_found_exception_create_issue(): ], ) def test_create_issue_if_needed( - issues, create_new, title, message, comment_to_existing + issues, + create_new, + title, + message, + comment_to_existing, ): project = flexmock() check = lambda value: value is None # noqa @@ -333,17 +343,23 @@ def test_create_issue_if_needed( if create_new: issue_mock = flexmock( - id=3, title="new issue", url="https://github.com/namespace/project/issues/3" + id=3, + title="new issue", + url="https://github.com/namespace/project/issues/3", ) issue_mock.should_receive("comment").times(0) project.should_receive("create_issue").with_args( - title=f"[packit] {title}", body=message + title=f"[packit] {title}", + body=message, ).and_return(issue_mock).once() check = lambda value: value.title == "new issue" # noqa issue_created = PackageConfigGetter.create_issue_if_needed( - project, title, message, comment_to_existing + project, + title, + message, + comment_to_existing, ) assert check(issue_created) diff --git a/tests/unit/test_copr_build.py b/tests/unit/test_copr_build.py index 4d7bbca9e..c52efb929 100644 --- a/tests/unit/test_copr_build.py +++ b/tests/unit/test_copr_build.py @@ -125,9 +125,9 @@ def build_helper( "package": CommonPackageConfig( _targets=_targets, owner=owner, - ) + ), }, - ) + ), ] pkg_conf = PackageConfig( @@ -141,7 +141,8 @@ def build_helper( project=project_type( repo="the-example-repo", service=flexmock( - instance_url="git.instance.io", hostname="git.instance.io" + instance_url="git.instance.io", + hostname="git.instance.io", ), namespace="the/example/namespace", ), @@ -182,7 +183,7 @@ def test_copr_build_fails_chroot_update(github_pr_event): # enforce that we are reporting on our own Copr project helper.job_build.owner = "packit" flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( - {"f31", "f32"} + {"f31", "f32"}, ) flexmock(CoprHelper).should_receive("create_or_update_copr_project").and_raise( PackitCoprSettingsException, @@ -212,14 +213,14 @@ def test_copr_build_fails_chroot_update(github_pr_event): "```diff\n" "-f30\n" "+f32\n" - "```\n" + "```\n", ) .and_return() .mock() ) flexmock(BaseBuildJobHelper).should_receive("status_reporter").and_return( - status_reporter + status_reporter, ) with pytest.raises(PackitCoprSettingsException): helper.create_or_update_copr_project() @@ -233,7 +234,8 @@ def test_copr_build_fails_chroot_update(github_pr_event): id="new_installation", ), pytest.param( - [], id="explicitly_defined_empty_key" + [], + id="explicitly_defined_empty_key", ), # user defines this key (it's None by default) pytest.param( ["make", "findutils"], @@ -263,18 +265,18 @@ def test_run_copr_build_from_source_script(github_pr_event, srpm_build_deps): helper.job_config.srpm_build_deps = srpm_build_deps flexmock(GithubInstallationModel).should_receive("get_by_account_login").with_args( - account_login="packit-service" + account_login="packit-service", ).and_return( flexmock( repositories=[flexmock(repo_name="packit")], - ) + ), ) flexmock(GitProjectModel).should_receive("get_by_id").and_return( - flexmock(repo_name="packit") + flexmock(repo_name="packit"), ) flexmock(GithubProject).should_receive("create_check_run").and_return().times(4) flexmock(GithubProject).should_receive("get_pr").and_return( - flexmock(source_project=flexmock(), target_branch="main") + flexmock(source_project=flexmock(), target_branch="main"), ) flexmock(SRPMBuildModel).should_receive("create_with_new_run").and_return( ( @@ -284,7 +286,7 @@ def test_run_copr_build_from_source_script(github_pr_event, srpm_build_deps): .should_receive("set_copr_web_url") .mock(), flexmock(), - ) + ), ) build = flexmock(id=1, status=BuildStatus.waiting_for_srpm) @@ -295,15 +297,15 @@ def test_run_copr_build_from_source_script(github_pr_event, srpm_build_deps): flexmock(CoprBuildGroupModel).should_receive("create").and_return(group) flexmock(CoprBuildTargetModel).should_receive("create").and_return(build).times(4) flexmock(PullRequestGithubEvent).should_receive("db_project_object").and_return( - flexmock() + flexmock(), ) # copr build flexmock(CoprHelper).should_receive("create_or_update_copr_project").and_return( - None + None, ) flexmock(helper).should_receive("get_latest_fedora_stable_chroot").and_return( - "fedora-35-x86_64" + "fedora-35-x86_64", ) flexmock(helper).should_call("run_copr_build_from_source_script").once() @@ -318,14 +320,14 @@ def test_run_copr_build_from_source_script(github_pr_event, srpm_build_deps): id=2, projectname="the-project-name", ownername="the-owner", - ) + ), ) .mock(), mock_chroot_proxy=flexmock() .should_receive("get_list") .and_return({target: "" for target in DEFAULT_TARGETS}) .mock(), - ) + ), ) flexmock(Celery).should_receive("send_task").once() @@ -351,7 +353,12 @@ def test_run_copr_build_from_source_script(github_pr_event, srpm_build_deps): ], ) def test_run_copr_build_from_source_script_github_outage_retry( - github_pr_event, retry_number, interval, delay, retry, exc + github_pr_event, + retry_number, + interval, + delay, + retry, + exc, ): helper = build_helper( event=github_pr_event, @@ -363,14 +370,14 @@ def test_run_copr_build_from_source_script_github_outage_retry( id=123, project_event_model_type=ProjectEventModelType.pull_request, commit_sha="528b803be6f93e19ca4130bf4976f2800a3004c4", - ) + ), ) .mock(), task=CeleryTask( flexmock( request=flexmock(retries=retry_number, kwargs={}), max_retries=DEFAULT_RETRY_LIMIT, - ) + ), ), copr_build_group_id=1 if retry_number > 0 else None, ) @@ -384,7 +391,7 @@ def test_run_copr_build_from_source_script_github_outage_retry( id=2, type=ProjectEventModelType.pull_request, commit_sha="528b803be6f93e19ca4130bf4976f2800a3004c4", - ) + ), ) flexmock(GithubProject).should_receive("get_pr").and_raise(exc) srpm_model = flexmock(status="success", id=1) @@ -392,18 +399,18 @@ def test_run_copr_build_from_source_script_github_outage_retry( ( srpm_model, flexmock(), - ) + ), ) flexmock(PullRequestGithubEvent).should_receive("db_project_object").and_return( - flexmock() + flexmock(), ) # copr build flexmock(CoprHelper).should_receive("create_or_update_copr_project").and_return( - None + None, ) flexmock(helper).should_receive("get_latest_fedora_stable_chroot").and_return( - "fedora-35-x86_64" + "fedora-35-x86_64", ) flexmock(Client).should_receive("create_from_config_file").and_return( flexmock( @@ -415,14 +422,14 @@ def test_run_copr_build_from_source_script_github_outage_retry( id=2, projectname="the-project-name", ownername="the-owner", - ) + ), ) .mock(), mock_chroot_proxy=flexmock() .should_receive("get_list") .and_return({"bright-future-x86_64": "", "__proxy__": "something"}) .mock(), - ) + ), ) build = flexmock(id=1) group = flexmock(id=1, grouped_targets=[build]) @@ -432,7 +439,7 @@ def test_run_copr_build_from_source_script_github_outage_retry( flexmock(CoprBuildGroupModel).should_receive("create").never() # We set it to pending flexmock(build).should_receive("set_status").with_args( - BuildStatus.waiting_for_srpm + BuildStatus.waiting_for_srpm, ) else: flexmock(CoprBuildGroupModel).should_receive("create").and_return(group) @@ -480,12 +487,15 @@ def test_run_copr_build_from_source_script_github_outage_retry( ], ) def test_report_pending_build_and_test_on_build_submission( - github_pr_event, project, generic_statuses, sync_test_job_statuses_with_builds + github_pr_event, + project, + generic_statuses, + sync_test_job_statuses_with_builds, ): helper = CoprBuildJobHelper( package_config=None, job_config=flexmock( - sync_test_job_statuses_with_builds=sync_test_job_statuses_with_builds + sync_test_job_statuses_with_builds=sync_test_job_statuses_with_builds, ), service_config=ServiceConfig.get_service_config(), project=project, @@ -501,7 +511,7 @@ def test_report_pending_build_and_test_on_build_submission( url=web_url, ).once() flexmock(CoprBuildJobHelper).should_receive( - "report_status_to_all_test_jobs" + "report_status_to_all_test_jobs", ).with_args( description="Job is in progress...", state=( @@ -518,7 +528,7 @@ def test_report_pending_build_and_test_on_build_submission( url="/results/srpm-builds/1", ).once() flexmock(CoprBuildJobHelper).should_receive( - "report_status_to_all_test_jobs" + "report_status_to_all_test_jobs", ).with_args( description=( "SRPM build in Copr was submitted..." @@ -547,7 +557,7 @@ def test_handle_rpm_build_start(github_pr_event, sync_test_job_statuses_with_bui helper = CoprBuildJobHelper( package_config=None, job_config=flexmock( - sync_test_job_statuses_with_builds=sync_test_job_statuses_with_builds + sync_test_job_statuses_with_builds=sync_test_job_statuses_with_builds, ), service_config=ServiceConfig.get_service_config(), project=GithubProject(None, None, None), @@ -558,7 +568,7 @@ def test_handle_rpm_build_start(github_pr_event, sync_test_job_statuses_with_bui chroot = "fedora-rawhide-x86_64" if sync_test_job_statuses_with_builds: flexmock(CoprBuildJobHelper).should_receive( - "report_status_to_build_for_chroot" + "report_status_to_build_for_chroot", ).with_args( description="Starting RPM build...", state=BaseCommitStatus.running, @@ -568,7 +578,7 @@ def test_handle_rpm_build_start(github_pr_event, sync_test_job_statuses_with_bui update_feedback_time=None, ).once() flexmock(CoprBuildJobHelper).should_receive( - "report_status_to_all_test_jobs_for_chroot" + "report_status_to_all_test_jobs_for_chroot", ).with_args( description="Starting RPM build...", state=BaseCommitStatus.running, @@ -580,7 +590,7 @@ def test_handle_rpm_build_start(github_pr_event, sync_test_job_statuses_with_bui ).once() else: flexmock(CoprBuildJobHelper).should_receive( - "report_status_to_build_for_chroot" + "report_status_to_build_for_chroot", ).with_args( description="Starting RPM build...", state=BaseCommitStatus.running, @@ -588,7 +598,7 @@ def test_handle_rpm_build_start(github_pr_event, sync_test_job_statuses_with_bui chroot=chroot, ).once() flexmock(CoprBuildJobHelper).should_receive( - "report_status_to_all_test_jobs_for_chroot" + "report_status_to_all_test_jobs_for_chroot", ).never() target = flexmock(id=1, status=BuildStatus.pending, target=chroot) @@ -601,10 +611,10 @@ def test_handle_rpm_build_start(github_pr_event, sync_test_job_statuses_with_bui def test_get_latest_fedora_stable_chroot(github_pr_event): flexmock(packit_service.worker.helpers.build.copr_build).should_receive( - "get_aliases" + "get_aliases", ).and_return({"fedora-stable": ["fedora-34", "fedora-35"]}) flexmock(CoprHelper).should_receive("get_valid_build_targets").with_args( - "fedora-35" + "fedora-35", ).and_return({"fedora-35-x86_64"}) assert ( build_helper(github_pr_event).get_latest_fedora_stable_chroot() @@ -624,7 +634,7 @@ def test_get_latest_fedora_stable_chroot(github_pr_event): packages={ "package": CommonPackageConfig( _targets=["fedora-all"], - ) + ), }, ), JobConfig( @@ -641,7 +651,7 @@ def test_get_latest_fedora_stable_chroot(github_pr_event): packages={ "package": CommonPackageConfig( _targets=["fedora-all"], - ) + ), }, ), 0, @@ -660,7 +670,7 @@ def test_get_latest_fedora_stable_chroot(github_pr_event): packages={ "package": CommonPackageConfig( _targets=["fedora-all"], - ) + ), }, ), JobConfig( @@ -669,7 +679,7 @@ def test_get_latest_fedora_stable_chroot(github_pr_event): packages={ "package": CommonPackageConfig( _targets=["fedora-all"], - ) + ), }, ), JobConfig( @@ -686,7 +696,7 @@ def test_get_latest_fedora_stable_chroot(github_pr_event): packages={ "package": CommonPackageConfig( _targets=["fedora-all"], - ) + ), }, ), 2, @@ -732,14 +742,14 @@ def test_submit_copr_build( helper = build_helper(event=github_pr_event) flexmock(helper).should_receive("create_or_update_copr_project").and_return("") flexmock(helper).should_receive("is_custom_copr_project_defined").and_return( - is_custom_copr_project + is_custom_copr_project, ) flexmock(helper).should_receive("job_project").and_return("") flexmock(helper).should_receive("srpm_path").and_return("") flexmock(helper).should_receive("forge_project").and_return("") flexmock(helper).should_receive("configured_copr_project").and_return("") flexmock(CoprHelper).should_receive("get_copr_settings_url").and_return( - "https://copr.fedorainfracloud.org/coprs//edit/" + "https://copr.fedorainfracloud.org/coprs//edit/", ) flexmock(helper).should_receive("status_reporter").and_return( flexmock() @@ -748,20 +758,25 @@ def test_submit_copr_build( body="Your git-forge project is not allowed to use the configured `` Copr project.\n\n" "Please, add this git-forge project `` to `Packit allowed forge projects`in the " "[Copr project settings]" - "(https://copr.fedorainfracloud.org/coprs//edit/#packit_forge_projects_allowed). " + "(https://copr.fedorainfracloud.org/coprs//edit/#packit_forge_projects_allowed). ", ) - .mock() + .mock(), ) if copr_server_raise_exc: flexmock(BuildProxy).should_receive("create_from_file").and_raise( - CoprAuthException("Forge project .... can't build in this Copr via Packit.") + CoprAuthException( + "Forge project .... can't build in this Copr via Packit.", + ), ) with pytest.raises(CoprAuthException): helper.submit_copr_build() else: flexmock(BuildProxy).should_receive("create_from_file").with_args( - ownername="", projectname="", path="", buildopts=buildopts + ownername="", + projectname="", + path="", + buildopts=buildopts, ).and_return(flexmock(id=0)) helper.submit_copr_build() @@ -804,7 +819,7 @@ def test_default_copr_project_name_for_monorepos(github_pr_event): }, ), "package-a", - ) + ), ], ) assert helper.default_project_name == "the-example-namespace-the-example-repo-342" @@ -822,14 +837,14 @@ def test_copr_build_invalid_copr_project_name(github_pr_event): job_config_trigger_type=JobConfigTriggerType.pull_request, id=123, project_event_model_type=ProjectEventModelType.pull_request, - ) + ), ) .mock(), ) # enforce that we are reporting on our own Copr project helper.job_build.owner = "packit" flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( - {"f31", "f32"} + {"f31", "f32"}, ) flexmock(CoprHelper).should_receive("create_or_update_copr_project").and_raise( PackitCoprProjectException( @@ -837,7 +852,7 @@ def test_copr_build_invalid_copr_project_name(github_pr_event): "packit-specfile-91-fedora+epel chroots=['fedora-rawhide-x86_64', " "'epel-9-x86_64', 'fedora-36-x86_64', 'fedora-35-x86_64']): name: " "Name must contain only letters, digits, underscores, dashes and dots.", - ) + ), ) expected_body = ( "We were not able to find or create Copr project " @@ -865,7 +880,7 @@ def test_copr_build_invalid_copr_project_name(github_pr_event): ) flexmock(CoprBuildJobHelper).should_receive("status_reporter").and_return( - status_reporter + status_reporter, ) with pytest.raises(PackitCoprProjectException): helper.create_or_update_copr_project() @@ -887,7 +902,7 @@ def test_copr_build_invalid_copr_project_name(github_pr_event): packages={ "package": CommonPackageConfig( use_internal_tf=True, - ) + ), }, ), ], @@ -907,7 +922,7 @@ def test_copr_build_invalid_copr_project_name(github_pr_event): packages={ "package": CommonPackageConfig( identifier="public", - ) + ), }, ), JobConfig( @@ -916,7 +931,7 @@ def test_copr_build_invalid_copr_project_name(github_pr_event): packages={ "package": CommonPackageConfig( use_internal_tf=True, - ) + ), }, ), ], @@ -936,7 +951,7 @@ def test_copr_build_invalid_copr_project_name(github_pr_event): packages={ "package": CommonPackageConfig( identifier="public", - ) + ), }, ), JobConfig( @@ -946,7 +961,7 @@ def test_copr_build_invalid_copr_project_name(github_pr_event): packages={ "package": CommonPackageConfig( use_internal_tf=True, - ) + ), }, ), ], @@ -967,7 +982,7 @@ def test_copr_build_invalid_copr_project_name(github_pr_event): packages={ "package": CommonPackageConfig( identifier="public", - ) + ), }, ), JobConfig( @@ -976,7 +991,7 @@ def test_copr_build_invalid_copr_project_name(github_pr_event): packages={ "package": CommonPackageConfig( use_internal_tf=True, - ) + ), }, ), ], @@ -995,15 +1010,17 @@ def test_check_if_actor_can_run_job_and_report(jobs, should_pass): project_event_model_type=ProjectEventModelType.pull_request, ) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.pull_request, event_id=123, commit_sha="abcdef" + type=ProjectEventModelType.pull_request, + event_id=123, + commit_sha="abcdef", ).and_return( flexmock() .should_receive("get_project_event_object") .and_return(db_project_object) - .mock() + .mock(), ) flexmock(PullRequestModel).should_receive("get_or_create").and_return( - db_project_object + db_project_object, ) gh_project = flexmock(namespace="n", repo="r") diff --git a/tests/unit/test_distgit.py b/tests/unit/test_distgit.py index 40959e14e..0e405fa83 100644 --- a/tests/unit/test_distgit.py +++ b/tests/unit/test_distgit.py @@ -27,7 +27,7 @@ def test_create_one_issue_for_pr(): event_id=1, project_url="a project url", tag_name="056", - ) + ), ) project = ( flexmock() @@ -45,24 +45,27 @@ def test_create_one_issue_for_pr(): ) .should_receive("comment") .once() - .mock() - ] + .mock(), + ], ) flexmock(ProposeDownstreamHandler).should_receive("project").and_return(project) handler = ProposeDownstreamHandler( - None, flexmock(notifications=NotificationsConfig()), {}, flexmock() + None, + flexmock(notifications=NotificationsConfig()), + {}, + flexmock(), ) handler._report_errors_for_each_branch( { "f34": "Propose downstream failed for release 056", "f35": "Propose downstream failed for release 056", - } + }, ) handler._report_errors_for_each_branch( { "f34": "Propose downstream failed for release 056", "f35": "Propose downstream failed for release 056", - } + }, ) @@ -88,17 +91,19 @@ def test_retrigger_downstream_koji_build_pre_check(user_groups, data, check_pass data_dict = json.loads(data) flexmock(PackitAPI).should_receive("init_kerberos_ticket").and_return(None) flexmock(Client).should_receive("__getattr__").with_args( - "list_user_groups" + "list_user_groups", ).and_return(lambda username: user_groups) flexmock(DownstreamKojiBuildHandler).should_receive("service_config").and_return( - flexmock() + flexmock(), ) if not check_passed: flexmock(PackageConfigGetter).should_receive("create_issue_if_needed").once() result = DownstreamKojiBuildHandler.pre_check( - None, flexmock(issue_repository=flexmock()), data_dict + None, + flexmock(issue_repository=flexmock()), + data_dict, ) assert result == check_passed @@ -126,7 +131,10 @@ class Test(PullFromUpstreamHandler): pass handler = Test( - None, flexmock(upstream_project_url="url"), {"event_type": "unknown"}, None + None, + flexmock(upstream_project_url="url"), + {"event_type": "unknown"}, + None, ) flexmock(GithubService).should_receive("set_auth_method").once() flexmock(AbstractSyncReleaseHandler).should_receive("run").once() diff --git a/tests/unit/test_handler_mixin.py b/tests/unit/test_handler_mixin.py index d82ab576b..62b325088 100644 --- a/tests/unit/test_handler_mixin.py +++ b/tests/unit/test_handler_mixin.py @@ -19,12 +19,14 @@ def test_GetKojiBuildDataFromKojiServiceMixin(): class Test(GetKojiBuildDataFromKojiServiceMixin): def __init__(self): self._project = flexmock( - repo="a_repo", get_pr=lambda pr_id: flexmock(target_branch="a_branch") + repo="a_repo", + get_pr=lambda pr_id: flexmock(target_branch="a_branch"), ) self.data = flexmock(pr_id="123") flexmock(KojiHelper).should_receive("get_latest_candidate_build").with_args( - "a_repo", "a_branch" + "a_repo", + "a_branch", ).and_return({"nvr": "1.0.0", "state": 1, "build_id": 123, "task_id": 321}) mixin = Test() data = [] @@ -86,10 +88,12 @@ def branches(self): return ["f37", "f38"] flexmock(KojiHelper).should_receive("get_latest_candidate_build").with_args( - "a repo", "f37" + "a repo", + "f37", ).and_return({"nvr": "1.0.1", "state": 1, "build_id": 123, "task_id": 321}) flexmock(KojiHelper).should_receive("get_latest_candidate_build").with_args( - "a repo", "f38" + "a repo", + "f38", ).and_return({"nvr": "1.0.2", "state": 1, "build_id": 1234, "task_id": 4321}) mixin = Test() diff --git a/tests/unit/test_handler_vm_image.py b/tests/unit/test_handler_vm_image.py index bea5b4d73..a86b815a9 100644 --- a/tests/unit/test_handler_vm_image.py +++ b/tests/unit/test_handler_vm_image.py @@ -53,7 +53,7 @@ def __init__(self) -> None: mixin = Test() flexmock(ProjectEventModel).should_receive("get_or_create").and_return( - flexmock(id=1) + flexmock(id=1), ) flexmock(StatusReporter).should_receive("report").with_args( description="Building VM Image...", @@ -130,7 +130,7 @@ def test_vm_image_build_handler(fake_package_config_job_config_project_db_trigge None, ) flexmock(db_project_object).should_receive("__str__").and_return( - "db_project_object" + "db_project_object", ) handler.data._db_project_event = flexmock() handler.data._db_project_object = db_project_object @@ -142,7 +142,9 @@ def test_vm_image_build_handler(fake_package_config_job_config_project_db_trigge "results/mmassari/knx-stack/fedora-36-x86_64/" ) handler.packit_api.copr_helper.should_receive("get_repo_download_url").with_args( - owner="mmassari", project="knx-stack", chroot="fedora-36-x86_64" + owner="mmassari", + project="knx-stack", + chroot="fedora-36-x86_64", ).and_return(repo_download_url) flexmock(handler).should_receive("vm_image_builder").and_return( flexmock() @@ -158,7 +160,7 @@ def test_vm_image_build_handler(fake_package_config_job_config_project_db_trigge {"packages": ["python-knx-stack"]}, repo_download_url, ) - .mock() + .mock(), ) flexmock(handler).should_receive("report_status") @@ -200,7 +202,7 @@ def test_vm_image_build_result_handler_ok( handler._project = project flexmock(VMImageBuildTargetModel).should_receive("get_all_by_build_id").with_args( - 1 + 1, ).and_return( [ flexmock( @@ -209,13 +211,13 @@ def test_vm_image_build_result_handler_ok( flexmock() .should_receive("get_project_event_object") .and_return(db_project_object) - .mock() + .mock(), ], ) .should_receive("set_status") .with_args("error") - .mock() - ] + .mock(), + ], ) flexmock(handler).should_receive("report_status") @@ -244,7 +246,7 @@ def test_vm_image_build_result_handler_ko( handler._project = project flexmock(VMImageBuildTargetModel).should_receive("get_all_by_build_id").with_args( - 1 + 1, ).and_return([]) flexmock(handler).should_receive("report_status") diff --git a/tests/unit/test_jobs.py b/tests/unit/test_jobs.py index 8f3394d2d..650fbe5ba 100644 --- a/tests/unit/test_jobs.py +++ b/tests/unit/test_jobs.py @@ -531,7 +531,7 @@ packages={ "package": CommonPackageConfig( skip_build=True, - ) + ), }, ), ], @@ -553,7 +553,7 @@ packages={ "package": CommonPackageConfig( skip_build=True, - ) + ), }, ), ], @@ -956,12 +956,13 @@ def db_project_object(self): @property def packages_config(self): return flexmock( - get_job_views=lambda: jobs, packages={"package": CommonPackageConfig()} + get_job_views=lambda: jobs, + packages={"package": CommonPackageConfig()}, ) event = Event() flexmock(ServiceConfig).should_receive("get_service_config").and_return( - ServiceConfig(packit_comment_command_prefix="/packit") + ServiceConfig(packit_comment_command_prefix="/packit"), ) event_handlers = set(SteveJobs(event).get_handlers_for_event()) @@ -1111,7 +1112,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( skip_build=True, - ) + ), }, ), ], @@ -1131,7 +1132,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( skip_build=True, - ) + ), }, ), ], @@ -1174,7 +1175,12 @@ def packages_config(self): ], ) def test_get_handlers_for_comment_event( - event_cls, comment, packit_comment_command_prefix, db_project_object, jobs, result + event_cls, + comment, + packit_comment_command_prefix, + db_project_object, + jobs, + result, ): # We are using isinstance for matching event to handlers # and flexmock can't do this for us so we need a subclass to test it. @@ -1192,7 +1198,7 @@ def packages_config(self): return flexmock(get_job_views=lambda: jobs) flexmock(ServiceConfig).should_receive("get_service_config").and_return( - ServiceConfig(comment_command_prefix=packit_comment_command_prefix) + ServiceConfig(comment_command_prefix=packit_comment_command_prefix), ) event = Event() @@ -1200,7 +1206,7 @@ def packages_config(self): comment_object = flexmock() event._comment_object = comment_object flexmock(comment_object).should_receive("add_reaction").with_args( - COMMENT_REACTION + COMMENT_REACTION, ).once() event_handlers = set(SteveJobs(event).get_handlers_for_event()) @@ -1237,7 +1243,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( identifier="the-identifier", - ) + ), }, ), ], @@ -1257,7 +1263,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( identifier="the-identifier", - ) + ), }, ), ], @@ -1374,7 +1380,12 @@ def packages_config(self): ], ) def test_get_handlers_for_check_rerun_event( - event_cls, check_name_job, job_identifier, db_project_object, jobs, result + event_cls, + check_name_job, + job_identifier, + db_project_object, + jobs, + result, ): # We are using isinstance for matching event to handlers # and flexmock can't do this for us so we need a subclass to test it. @@ -1393,7 +1404,7 @@ def packages_config(self): return flexmock(get_job_views=lambda: jobs) flexmock(ServiceConfig).should_receive("get_service_config").and_return( - ServiceConfig(packit_comment_command_prefix="/packit") + ServiceConfig(packit_comment_command_prefix="/packit"), ) event = Event() @@ -1414,14 +1425,14 @@ def packages_config(self): type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], [ JobConfig( type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], id="build_for_pr&CoprBuildHandler&PullRequestGithubEvent", ), @@ -1434,14 +1445,14 @@ def packages_config(self): type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], [ JobConfig( type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], id="build_for_pr&CoprBuildStartHandler&CoprBuildStartEvent", ), @@ -1454,14 +1465,14 @@ def packages_config(self): type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], [ JobConfig( type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], id="build_for_pr&CoprBuildEndHandler&CoprBuildEndEvent", ), @@ -1475,7 +1486,7 @@ def packages_config(self): type=JobType.tests, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], [], id="tests_for_pr&CoprBuildHandler&PullRequestGithubEvent", @@ -1502,7 +1513,7 @@ def packages_config(self): type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], id="build_for_pr+tests_for_pr&CoprBuildHandler&PullRequestGithubEvent", ), @@ -1528,7 +1539,7 @@ def packages_config(self): type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], id="test_for_pr+build_for_pr&CoprBuildHandler&PullRequestGithubEvent", ), @@ -1544,7 +1555,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), JobConfig( @@ -1553,7 +1564,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), ], @@ -1564,7 +1575,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), JobConfig( @@ -1573,7 +1584,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), ], @@ -1591,7 +1602,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), JobConfig( @@ -1600,7 +1611,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), JobConfig( @@ -1609,7 +1620,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project3", - ) + ), }, ), ], @@ -1620,9 +1631,9 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, - ) + ), ], id="build_for_pr+build_for_commit+build_for_release" "&CoprBuildHandler&PullRequestGithubEvent", @@ -1638,7 +1649,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), JobConfig( @@ -1647,7 +1658,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), JobConfig( @@ -1656,7 +1667,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project3", - ) + ), }, ), ], @@ -1667,7 +1678,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), ], @@ -1685,7 +1696,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), JobConfig( @@ -1694,7 +1705,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), JobConfig( @@ -1703,7 +1714,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project3", - ) + ), }, ), ], @@ -1714,7 +1725,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project3", - ) + ), }, ), ], @@ -1733,7 +1744,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), JobConfig( @@ -1742,7 +1753,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), JobConfig( @@ -1751,7 +1762,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project3", - ) + ), }, ), ], @@ -1770,7 +1781,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), JobConfig( @@ -1779,7 +1790,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), JobConfig( @@ -1788,7 +1799,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project3", - ) + ), }, ), ], @@ -1799,7 +1810,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), ], @@ -1817,7 +1828,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), JobConfig( @@ -1826,7 +1837,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), JobConfig( @@ -1835,7 +1846,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project3", - ) + ), }, ), ], @@ -1846,7 +1857,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project3", - ) + ), }, ), ], @@ -1864,7 +1875,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), JobConfig( @@ -1873,7 +1884,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), JobConfig( @@ -1882,7 +1893,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project3", - ) + ), }, ), ], @@ -1893,7 +1904,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), ], @@ -1912,7 +1923,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project0", - ) + ), }, ), JobConfig( @@ -1921,7 +1932,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), JobConfig( @@ -1930,7 +1941,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), JobConfig( @@ -1939,7 +1950,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project3", - ) + ), }, ), ], @@ -1950,7 +1961,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project0", - ) + ), }, ), ], @@ -1968,7 +1979,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project0", - ) + ), }, ), JobConfig( @@ -1977,7 +1988,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), JobConfig( @@ -1986,7 +1997,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), JobConfig( @@ -1995,7 +2006,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project3", - ) + ), }, ), ], @@ -2006,7 +2017,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), ], @@ -2024,7 +2035,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project0", - ) + ), }, ), JobConfig( @@ -2033,7 +2044,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), JobConfig( @@ -2042,7 +2053,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), JobConfig( @@ -2051,7 +2062,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project3", - ) + ), }, ), ], @@ -2062,7 +2073,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project3", - ) + ), }, ), ], @@ -2080,7 +2091,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project0", - ) + ), }, ), JobConfig( @@ -2089,7 +2100,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), JobConfig( @@ -2098,7 +2109,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), JobConfig( @@ -2107,7 +2118,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project3", - ) + ), }, ), ], @@ -2118,7 +2129,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project0", - ) + ), }, ), ], @@ -2136,7 +2147,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project0", - ) + ), }, ), JobConfig( @@ -2145,7 +2156,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), JobConfig( @@ -2154,7 +2165,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), JobConfig( @@ -2163,7 +2174,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project3", - ) + ), }, ), ], @@ -2174,7 +2185,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project0", - ) + ), }, ), ], @@ -2192,7 +2203,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project0", - ) + ), }, ), JobConfig( @@ -2201,7 +2212,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), JobConfig( @@ -2210,7 +2221,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project2", - ) + ), }, ), JobConfig( @@ -2219,7 +2230,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project3", - ) + ), }, ), ], @@ -2230,7 +2241,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( project="project1", - ) + ), }, ), ], @@ -2259,7 +2270,7 @@ def packages_config(self): type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], id="build_for_pr+production_build_for_pr&CoprBuildHandler&PullRequestGithubEvent", ), @@ -2284,7 +2295,7 @@ def packages_config(self): type=JobType.production_build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], id="build_for_pr+production_build_for_pr&KojiBuildHandler&PullRequestGithubEvent", ), @@ -2309,7 +2320,7 @@ def packages_config(self): type=JobType.production_build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], id="build_for_pr+production_build_for_pr&KojiBuildReportHandler&KojiBuildEvent", ), @@ -2323,14 +2334,14 @@ def packages_config(self): type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], [ JobConfig( type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], id="build_for_pr&CoprBuildHandler&PullRequestCommentGithubEvent", ), @@ -2343,14 +2354,14 @@ def packages_config(self): type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], [ JobConfig( type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], id="build_for_pr&CoprBuildHandler&MergeRequestCommentGitlabEvent", ), @@ -2363,14 +2374,14 @@ def packages_config(self): type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], [ JobConfig( type=JobType.build, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], id="build_for_pr&CoprBuildHandler&PullRequestCommentPagureEvent", ), @@ -2384,7 +2395,7 @@ def packages_config(self): type=JobType.tests, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], [], id="tests_for_pr&CoprBuildHandler&PullRequestCommentGithubEvent", @@ -2399,14 +2410,14 @@ def packages_config(self): type=JobType.tests, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], [ JobConfig( type=JobType.tests, trigger=JobConfigTriggerType.pull_request, packages={"package": CommonPackageConfig()}, - ) + ), ], id="tests_for_pr&TestingFarmHandler&PullRequestCommentGithubEvent", ), @@ -2420,14 +2431,14 @@ def packages_config(self): type=JobType.propose_downstream, trigger=JobConfigTriggerType.release, packages={"package": CommonPackageConfig()}, - ) + ), ], [ JobConfig( type=JobType.propose_downstream, trigger=JobConfigTriggerType.release, packages={"package": CommonPackageConfig()}, - ) + ), ], id="propose_downstream_for_release&TestingFarmHandler&PullRequestCommentGithubEvent", ), @@ -2440,14 +2451,14 @@ def packages_config(self): type=JobType.koji_build, trigger=JobConfigTriggerType.commit, packages={"package": CommonPackageConfig()}, - ) + ), ], [ JobConfig( type=JobType.koji_build, trigger=JobConfigTriggerType.commit, packages={"package": CommonPackageConfig()}, - ) + ), ], id="koji_build_for_commit&DownstreamKojiBuildHandler&PushPagureEvent", ), @@ -2460,14 +2471,14 @@ def packages_config(self): type=JobType.koji_build, trigger=JobConfigTriggerType.commit, packages={"package": CommonPackageConfig()}, - ) + ), ], [ JobConfig( type=JobType.koji_build, trigger=JobConfigTriggerType.commit, packages={"package": CommonPackageConfig()}, - ) + ), ], id="koji_build_for_commit&KojiBuildReportHandler&KojiBuildEvent", ), @@ -2480,14 +2491,14 @@ def packages_config(self): type=JobType.bodhi_update, trigger=JobConfigTriggerType.commit, packages={"package": CommonPackageConfig()}, - ) + ), ], [ JobConfig( type=JobType.bodhi_update, trigger=JobConfigTriggerType.commit, packages={"package": CommonPackageConfig()}, - ) + ), ], id="bodhi_update_for_commit&CreateBodhiUpdateHandler&KojiBuildEvent", ), @@ -2500,21 +2511,25 @@ def packages_config(self): type=JobType.bodhi_update, trigger=JobConfigTriggerType.commit, packages={"package": CommonPackageConfig()}, - ) + ), ], [ JobConfig( type=JobType.bodhi_update, trigger=JobConfigTriggerType.commit, packages={"package": CommonPackageConfig()}, - ) + ), ], id="bodhi_update_for_commit&KojiBuildReportHandler&KojiBuildEvent", ), ], ) def test_get_config_for_handler_kls( - handler_kls: Type[JobHandler], event_cls, db_project_object, jobs, result_job_config + handler_kls: Type[JobHandler], + event_cls, + db_project_object, + jobs, + result_job_config, ): class Event(event_cls): # type: ignore def __init__(self): @@ -2590,7 +2605,10 @@ def packages_config(self): ], ) def test_get_handlers_triggered_by_comment( - event_kls, comment, packit_comment_command_prefix, result + event_kls, + comment, + packit_comment_command_prefix, + result, ): class Event(event_kls): def __init__(self): @@ -2600,11 +2618,11 @@ def __init__(self): comment_object = flexmock() event._comment_object = comment_object flexmock(comment_object).should_receive("add_reaction").with_args( - COMMENT_REACTION + COMMENT_REACTION, ).once() flexmock(ServiceConfig).should_receive("get_service_config").and_return( - ServiceConfig(comment_command_prefix=packit_comment_command_prefix) + ServiceConfig(comment_command_prefix=packit_comment_command_prefix), ) event_handlers = SteveJobs(event).get_handlers_for_comment_and_rerun_event() assert event_handlers == result @@ -2636,7 +2654,7 @@ def __init__(self): self.check_name_job = check_name_job flexmock(ServiceConfig).should_receive("get_service_config").and_return( - ServiceConfig(packit_comment_command_prefix="/packit") + ServiceConfig(packit_comment_command_prefix="/packit"), ) event = Event() event_handlers = SteveJobs(event).get_handlers_for_comment_and_rerun_event() @@ -2688,7 +2706,9 @@ def __init__(self): ], ) def test_handler_doesnt_match_to_job( - event_kls, handler: Type[JobHandler], allowed_handlers + event_kls, + handler: Type[JobHandler], + allowed_handlers, ): class Event(event_kls): # type: ignore def __init__(self): @@ -3101,7 +3121,7 @@ def __init__(self): packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, ), JobConfig( @@ -3110,7 +3130,7 @@ def __init__(self): packages={ "package": CommonPackageConfig( identifier="second", - ) + ), }, ), ], @@ -3121,7 +3141,7 @@ def __init__(self): packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, ), ], @@ -3137,7 +3157,7 @@ def __init__(self): packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, manual_trigger=True, ), @@ -3149,7 +3169,7 @@ def __init__(self): packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, manual_trigger=True, ), @@ -3205,7 +3225,7 @@ def __init__(self): packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, manual_trigger=True, ), @@ -3215,7 +3235,7 @@ def __init__(self): packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, manual_trigger=False, ), @@ -3227,7 +3247,7 @@ def __init__(self): packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, manual_trigger=True, ), @@ -3237,7 +3257,7 @@ def __init__(self): packages={ "package": CommonPackageConfig( identifier="first", - ) + ), }, manual_trigger=False, ), @@ -3370,7 +3390,11 @@ def __init__(self): ], ) def test_get_jobs_matching_trigger( - event_kls, job_config_trigger_type, jobs, result, kwargs + event_kls, + job_config_trigger_type, + jobs, + result, + kwargs, ): class Event(event_kls): def __init__(self, **kwargs): @@ -3400,7 +3424,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( identifier="foo", - ) + ), }, ), JobConfig( @@ -3409,7 +3433,7 @@ def packages_config(self): packages={ "package": CommonPackageConfig( identifier="bar", - ) + ), }, ), ], @@ -3438,7 +3462,11 @@ def packages_config(self): ], ) def test_create_tasks_tf_identifier( - event_kls, jobs, handler_kls, tasks_created, identifier + event_kls, + jobs, + handler_kls, + tasks_created, + identifier, ): class Event(event_kls): def __init__(self): @@ -3447,7 +3475,8 @@ def __init__(self): @property def packages_config(self): return flexmock( - jobs=jobs, get_package_config_for=lambda job_config: flexmock() + jobs=jobs, + get_package_config_for=lambda job_config: flexmock(), ) def get_dict(self, *args, **kwargs): @@ -3467,11 +3496,11 @@ def actor(self): flexmock(handler_kls).should_receive("get_signature").and_return(None) flexmock(TaskResults, create_from=lambda *args, **kwargs: object()) flexmock(celery).should_receive("group").with_args( - tasks_created * [None] + tasks_created * [None], ).and_return(flexmock().should_receive("apply_async").mock()) statuses_check_feedback = flexmock() assert tasks_created == len( - SteveJobs(event).create_tasks(jobs, handler_kls, statuses_check_feedback) + SteveJobs(event).create_tasks(jobs, handler_kls, statuses_check_feedback), ) @@ -3537,7 +3566,7 @@ def test_monorepo_jobs_matching_event(): trigger=JobConfigTriggerType.release, skip_build=False, packages={ - "python-teamcity-messages-double": python_teamcity_messages_double + "python-teamcity-messages-double": python_teamcity_messages_double, }, ), ] @@ -3590,7 +3619,7 @@ def test_github_app_not_installed(): jobs = SteveJobs(event) flexmock(jobs).should_receive("is_project_public_or_enabled_private").and_raise( - GithubAppNotInstalledError + GithubAppNotInstalledError, ) assert not jobs.process() @@ -3599,7 +3628,7 @@ def test_github_app_not_installed(): def test_search_for_dg_config_in_issue_on_pr_comment(): assert ( SteveJobs( - AbstractPRCommentEvent(None, None, None, None) + AbstractPRCommentEvent(None, None, None, None), ).search_distgit_config_in_issue() is None ) @@ -3633,7 +3662,7 @@ def test_invalid_packit_deployment(): def test_unapproved_jobs(): event = flexmock(project=None, packages_config=[]) event.should_receive("get_dict").and_return( - {"project": None, "packages_config": []} + {"project": None, "packages_config": []}, ) jobs = SteveJobs(event) @@ -3643,7 +3672,7 @@ def test_unapproved_jobs(): flexmock(jobs).should_receive("is_packit_config_present").and_return(True) flexmock(jobs).should_receive("get_handlers_for_event").and_return([None]) flexmock(jobs).should_receive("get_config_for_handler_kls").and_return( - [None, None, None] + [None, None, None], ) # TODO: »do not« mock the ‹Allowlist› directly!!! flexmock(Allowlist).should_receive("check_and_report").and_return(False) diff --git a/tests/unit/test_koji_build.py b/tests/unit/test_koji_build.py index f54afdadc..6c402397d 100644 --- a/tests/unit/test_koji_build.py +++ b/tests/unit/test_koji_build.py @@ -77,9 +77,9 @@ def build_helper( _targets=_targets, owner=owner, scratch=scratch, - ) + ), }, - ) + ), ) pkg_conf = PackageConfig( @@ -105,7 +105,8 @@ def build_helper( def test_koji_build_check_names( - github_pr_event, add_pull_request_event_with_sha_528b80 + github_pr_event, + add_pull_request_event_with_sha_528b80, ): _, db_project_event = add_pull_request_event_with_sha_528b80 helper = build_helper( @@ -115,7 +116,7 @@ def test_koji_build_check_names( db_project_event=db_project_event, ) flexmock(koji_build).should_receive("get_all_koji_targets").and_return( - ["dark-past", "bright-future"] + ["dark-past", "bright-future"], ).once() koji_build_url = get_koji_build_info_url(1) @@ -137,7 +138,7 @@ def test_koji_build_check_names( ).and_return() flexmock(GitProject).should_receive("get_pr").and_return( - flexmock(source_project=flexmock(), target_branch="main") + flexmock(source_project=flexmock(), target_branch="main"), ) flexmock(GitProject).should_receive("set_commit_status").and_return().never() flexmock(SRPMBuildModel).should_receive("create_with_new_run").and_return( @@ -155,7 +156,7 @@ def test_koji_build_check_names( .should_receive("set_end_time") .mock(), flexmock(), - ) + ), ) flexmock(KojiBuildGroupModel).should_receive("create").and_return(flexmock(id=1)) flexmock(KojiBuildTargetModel).should_receive("create").and_return( @@ -163,7 +164,7 @@ def test_koji_build_check_names( .should_receive("set_task_id") .mock() .should_receive("set_web_url") - .mock() + .mock(), ) flexmock(PackitAPI).should_receive("create_srpm").and_return("my.srpm") @@ -173,7 +174,7 @@ def test_koji_build_check_names( ".dev21+gf2dec9b-1.20200407142424746041.21.gf2dec9b.fc31.src.rpm\n" "[====================================] 100% 00:00:11 1.67 MiB 148.10 KiB/sec\n" "Created task: 43429338\n" - "Task info: https://koji.fedoraproject.org/koji/taskinfo?taskID=43429338\n" + "Task info: https://koji.fedoraproject.org/koji/taskinfo?taskID=43429338\n", ) flexmock(PackitAPI).should_receive("init_kerberos_ticket").once() @@ -182,7 +183,8 @@ def test_koji_build_check_names( def test_koji_build_failed_kerberos( - github_pr_event, add_pull_request_event_with_sha_528b80 + github_pr_event, + add_pull_request_event_with_sha_528b80, ): _, db_project_event = add_pull_request_event_with_sha_528b80 helper = build_helper( @@ -192,7 +194,7 @@ def test_koji_build_failed_kerberos( db_project_event=db_project_event, ) flexmock(koji_build).should_receive("get_all_koji_targets").and_return( - ["dark-past", "bright-future"] + ["dark-past", "bright-future"], ).never() flexmock(StatusReporter).should_receive("set_status").with_args( @@ -213,7 +215,7 @@ def test_koji_build_failed_kerberos( ).and_return() flexmock(GitProject).should_receive("get_pr").and_return( - flexmock(source_project=flexmock(), target_branch="main") + flexmock(source_project=flexmock(), target_branch="main"), ) flexmock(GitProject).should_receive("set_commit_status").and_return().never() flexmock(SRPMBuildModel).should_receive("create_with_new_run").and_return( @@ -231,7 +233,7 @@ def test_koji_build_failed_kerberos( .should_receive("set_end_time") .mock(), flexmock(), - ) + ), ) flexmock(KojiBuildTargetModel).should_receive("create").and_return(flexmock(id=1)) flexmock(PackitAPI).should_receive("create_srpm").and_return("my.srpm") @@ -252,7 +254,8 @@ def test_koji_build_failed_kerberos( def test_koji_build_target_not_supported( - github_pr_event, add_pull_request_event_with_sha_528b80 + github_pr_event, + add_pull_request_event_with_sha_528b80, ): _, db_project_event = add_pull_request_event_with_sha_528b80 helper = build_helper( @@ -262,7 +265,7 @@ def test_koji_build_target_not_supported( db_project_event=db_project_event, ) flexmock(koji_build).should_receive("get_all_koji_targets").and_return( - ["dark-past", "bright-future"] + ["dark-past", "bright-future"], ).once() flexmock(StatusReporter).should_receive("set_status").with_args( @@ -283,7 +286,7 @@ def test_koji_build_target_not_supported( ).and_return() flexmock(GitProject).should_receive("get_pr").and_return( - flexmock(source_project=flexmock(), target_branch="main") + flexmock(source_project=flexmock(), target_branch="main"), ) flexmock(GitProject).should_receive("set_commit_status").and_return().never() flexmock(SRPMBuildModel).should_receive("create_with_new_run").and_return( @@ -301,7 +304,7 @@ def test_koji_build_target_not_supported( .should_receive("set_end_time") .mock(), flexmock(), - ) + ), ) flexmock(KojiBuildGroupModel).should_receive("create").and_return(flexmock(id=1)) flexmock(KojiBuildTargetModel).should_receive("create").and_return(flexmock(id=1)) @@ -316,7 +319,8 @@ def test_koji_build_target_not_supported( def test_koji_build_with_multiple_targets( - github_pr_event, add_pull_request_event_with_sha_528b80 + github_pr_event, + add_pull_request_event_with_sha_528b80, ): _, db_project_event = add_pull_request_event_with_sha_528b80 helper = build_helper( @@ -326,14 +330,14 @@ def test_koji_build_with_multiple_targets( db_project_event=db_project_event, ) flexmock(koji_build).should_receive("get_all_koji_targets").and_return( - ["dark-past", "bright-future"] + ["dark-past", "bright-future"], ).once() # 2x SRPM + 2x RPM flexmock(StatusReporter).should_receive("set_status").and_return().times(4) flexmock(GitProject).should_receive("get_pr").and_return( - flexmock(source_project=flexmock(), target_branch="main") + flexmock(source_project=flexmock(), target_branch="main"), ) flexmock(GitProject).should_receive("set_commit_status").and_return().never() flexmock(SRPMBuildModel).should_receive("create_with_new_run").and_return( @@ -351,7 +355,7 @@ def test_koji_build_with_multiple_targets( .should_receive("set_end_time") .mock(), flexmock(), - ) + ), ) flexmock(KojiBuildGroupModel).should_receive("create").and_return(flexmock(id=1)) flexmock(KojiBuildTargetModel).should_receive("create").and_return( @@ -359,13 +363,13 @@ def test_koji_build_with_multiple_targets( .should_receive("set_task_id") .mock() .should_receive("set_web_url") - .mock() + .mock(), ).and_return( flexmock(id=2) .should_receive("set_task_id") .mock() .should_receive("set_web_url") - .mock() + .mock(), ) flexmock(PackitAPI).should_receive("create_srpm").and_return("my.srpm") @@ -375,13 +379,13 @@ def test_koji_build_with_multiple_targets( ".dev21+gf2dec9b-1.20200407142424746041.21.gf2dec9b.fc31.src.rpm\n" "[====================================] 100% 00:00:11 1.67 MiB 148.10 KiB/sec\n" "Created task: 43429338\n" - "Task info: https://koji.fedoraproject.org/koji/taskinfo?taskID=43429338\n" + "Task info: https://koji.fedoraproject.org/koji/taskinfo?taskID=43429338\n", ).and_return( "Uploading srpm: /python-ogr-0.11.1" ".dev21+gf2dec9b-1.20200407142424746041.21.gf2dec9b.fc31.src.rpm\n" "[====================================] 100% 00:00:11 1.67 MiB 148.10 KiB/sec\n" "Created task: 43429339\n" - "Task info: https://koji.fedoraproject.org/koji/taskinfo?taskID=43429339\n" + "Task info: https://koji.fedoraproject.org/koji/taskinfo?taskID=43429339\n", ) assert helper.run_koji_build()["success"] @@ -396,7 +400,7 @@ def test_koji_build_failed(github_pr_event, add_pull_request_event_with_sha_528b db_project_event=db_project_event, ) flexmock(koji_build).should_receive("get_all_koji_targets").and_return( - ["dark-past", "bright-future"] + ["dark-past", "bright-future"], ).once() flexmock(StatusReporter).should_receive("set_status").with_args( @@ -419,7 +423,7 @@ def test_koji_build_failed(github_pr_event, add_pull_request_event_with_sha_528b ).and_return() flexmock(GitProject).should_receive("get_pr").and_return( - flexmock(source_project=flexmock(), target_branch="main") + flexmock(source_project=flexmock(), target_branch="main"), ) flexmock(GitProject).should_receive("set_commit_status").and_return().never() flexmock(SRPMBuildModel).should_receive("create_with_new_run").and_return( @@ -437,18 +441,19 @@ def test_koji_build_failed(github_pr_event, add_pull_request_event_with_sha_528b .should_receive("set_end_time") .mock(), flexmock(), - ) + ), ) flexmock(KojiBuildGroupModel).should_receive("create").and_return(flexmock(id=1)) flexmock(KojiBuildTargetModel).should_receive("create").and_return( - flexmock(id=1).should_receive("set_status").with_args("error").mock() + flexmock(id=1).should_receive("set_status").with_args("error").mock(), ) flexmock(PackitAPI).should_receive("create_srpm").and_return("my.srpm") # koji build flexmock(sentry_integration).should_receive("send_to_sentry").and_return().once() flexmock(GitUpstream).should_receive("koji_build").and_raise( - Exception, "some error" + Exception, + "some error", ) result = helper.run_koji_build() @@ -458,7 +463,8 @@ def test_koji_build_failed(github_pr_event, add_pull_request_event_with_sha_528b def test_koji_build_failed_srpm( - github_pr_event, add_pull_request_event_with_sha_528b80 + github_pr_event, + add_pull_request_event_with_sha_528b80, ): _, db_project_event = add_pull_request_event_with_sha_528b80 helper = build_helper( @@ -486,7 +492,7 @@ def test_koji_build_failed_srpm( ).and_return() flexmock(GitProject).should_receive("get_pr").and_return( - flexmock(source_project=flexmock(), target_branch="main") + flexmock(source_project=flexmock(), target_branch="main"), ) flexmock(GitProject).should_receive("set_commit_status").and_return().never() flexmock(PackitAPI).should_receive("create_srpm").and_raise(Exception, "some error") @@ -505,7 +511,7 @@ def test_koji_build_failed_srpm( .should_receive("set_end_time") .mock(), flexmock(), - ) + ), ) flexmock(KojiBuildTargetModel).should_receive("create").never() flexmock(sentry_integration).should_receive("send_to_sentry").and_return().once() @@ -516,7 +522,8 @@ def test_koji_build_failed_srpm( def test_koji_build_targets_override( - github_pr_event, add_pull_request_event_with_sha_528b80 + github_pr_event, + add_pull_request_event_with_sha_528b80, ): _, db_project_event = add_pull_request_event_with_sha_528b80 helper = build_helper( @@ -527,14 +534,14 @@ def test_koji_build_targets_override( build_targets_override={"bright-future"}, ) flexmock(koji_build).should_receive("get_all_koji_targets").and_return( - ["dark-past", "bright-future"] + ["dark-past", "bright-future"], ).once() # SRPM + RPM flexmock(StatusReporter).should_receive("set_status").and_return().times(2) flexmock(GitProject).should_receive("get_pr").and_return( - flexmock(source_project=flexmock(), target_branch="main") + flexmock(source_project=flexmock(), target_branch="main"), ) flexmock(GitProject).should_receive("set_commit_status").and_return().never() flexmock(SRPMBuildModel).should_receive("create_with_new_run").and_return( @@ -552,7 +559,7 @@ def test_koji_build_targets_override( .should_receive("set_end_time") .mock(), flexmock(), - ) + ), ) flexmock(KojiBuildGroupModel).should_receive("create").and_return(flexmock(id=1)) flexmock(KojiBuildTargetModel).should_receive("create").and_return( @@ -560,13 +567,13 @@ def test_koji_build_targets_override( .should_receive("set_task_id") .mock() .should_receive("set_web_url") - .mock() + .mock(), ).and_return( flexmock(id=2) .should_receive("set_task_id") .mock() .should_receive("set_web_url") - .mock() + .mock(), ) flexmock(PackitAPI).should_receive("create_srpm").and_return("my.srpm") @@ -581,7 +588,7 @@ def test_koji_build_targets_override( ".dev21+gf2dec9b-1.20200407142424746041.21.gf2dec9b.fc31.src.rpm\n" "[====================================] 100% 00:00:11 1.67 MiB 148.10 KiB/sec\n" "Created task: 43429338\n" - "Task info: https://koji.fedoraproject.org/koji/taskinfo?taskID=43429338\n" + "Task info: https://koji.fedoraproject.org/koji/taskinfo?taskID=43429338\n", ) assert helper.run_koji_build()["success"] diff --git a/tests/unit/test_mixin.py b/tests/unit/test_mixin.py index 55dc3be60..8fce31024 100644 --- a/tests/unit/test_mixin.py +++ b/tests/unit/test_mixin.py @@ -116,7 +116,7 @@ def __init__(self) -> None: flexmock( description=desc, get_comments=lambda: [flexmock(body=c) for c in comments], - ) + ), ) .mock() ) @@ -151,7 +151,7 @@ def __init__(self) -> None: ) event.dist_git_project_url = "url to distgit" self.data = EventData.from_event_dict( - flexmock(event, tag_name="a tag", commit_sha="aebdf").get_dict() + flexmock(event, tag_name="a tag", commit_sha="aebdf").get_dict(), ) mixin = Test() diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py index 0580fa2bb..fc216d860 100644 --- a/tests/unit/test_models.py +++ b/tests/unit/test_models.py @@ -50,11 +50,13 @@ def models(): def test_filter_most_recent_target_models_by_status(models): assert filter_most_recent_target_models_by_status( - models, [TestingFarmResult.passed] + models, + [TestingFarmResult.passed], ) == {models[1]} def test_filter_most_recent_target_names_by_status(models): assert filter_most_recent_target_names_by_status( - models, [TestingFarmResult.passed] + models, + [TestingFarmResult.passed], ) == {"target-a"} diff --git a/tests/unit/test_propose_downstream.py b/tests/unit/test_propose_downstream.py index dbeb4ddec..312e999ab 100644 --- a/tests/unit/test_propose_downstream.py +++ b/tests/unit/test_propose_downstream.py @@ -23,7 +23,7 @@ packages={ "package": CommonPackageConfig( dist_git_branches=["main", "f34"], - ) + ), }, ), ], @@ -40,7 +40,7 @@ packages={ "package": CommonPackageConfig( dist_git_branches=["f34", "main"], - ) + ), }, ), ], @@ -57,7 +57,7 @@ packages={ "package": CommonPackageConfig( dist_git_branches=["f35", "f34"], - ) + ), }, ), ], @@ -91,7 +91,7 @@ "f35": {}, "f34": {}, }, - ) + ), }, ), ], @@ -110,10 +110,10 @@ # no sense but possible! dist_git_branches={ "fedora-branched": { - "fast_forward_merge_into": ["fedora-stable"] - } + "fast_forward_merge_into": ["fedora-stable"], + }, }, - ) + ), }, ), ], @@ -133,7 +133,7 @@ "f41": {"fast_forward_merge_into": ["f40", "f39"]}, "f38": {"fast_forward_merge_into": ["f37"]}, }, - ) + ), }, ), ], @@ -159,7 +159,8 @@ def test_branches( propose_downstream_helper = ProposeDownstreamJobHelper( service_config=ServiceConfig(), package_config=PackageConfig( - jobs=jobs, packages={"package": CommonPackageConfig()} + jobs=jobs, + packages={"package": CommonPackageConfig()}, ), job_config=jobs[0], project=flexmock(), diff --git a/tests/unit/test_reporting.py b/tests/unit/test_reporting.py index 6d895e367..04dc65590 100644 --- a/tests/unit/test_reporting.py +++ b/tests/unit/test_reporting.py @@ -84,17 +84,25 @@ def test_set_status_pagure( ): project = PagureProject(None, None, PagureService()) reporter = StatusReporter.get_instance( - project=project, commit_sha=commit_sha, pr_id=pr_id, packit_user="packit" + project=project, + commit_sha=commit_sha, + pr_id=pr_id, + packit_user="packit", ) act_upon = flexmock(pr_object.source_project) if pr_id else flexmock(PagureProject) act_upon.should_receive("set_commit_status").with_args( - commit_sha, state_to_set, url, description, check_name, trim=True + commit_sha, + state_to_set, + url, + description, + check_name, + trim=True, ).once() if pr_id is not None: flexmock(PagureProject).should_receive("get_pr").with_args(pr_id).and_return( - pr_object + pr_object, ) reporter.set_status(state, description, check_name, url) @@ -128,21 +136,36 @@ def test_set_status_pagure( ], ) def test_set_status_gitlab( - commit_sha, pr_id, pr_object, state, description, check_name, url, state_to_set + commit_sha, + pr_id, + pr_object, + state, + description, + check_name, + url, + state_to_set, ): project = GitlabProject(None, None, None) reporter = StatusReporter.get_instance( - project=project, commit_sha=commit_sha, pr_id=pr_id, packit_user="packit" + project=project, + commit_sha=commit_sha, + pr_id=pr_id, + packit_user="packit", ) act_upon = flexmock(pr_object.source_project) if pr_id else flexmock(GitlabProject) act_upon.should_receive("set_commit_status").with_args( - commit_sha, state_to_set, url, description, check_name, trim=True + commit_sha, + state_to_set, + url, + description, + check_name, + trim=True, ).once() if pr_id is not None: flexmock(GitlabProject).should_receive("get_pr").with_args(pr_id).and_return( - pr_object + pr_object, ) reporter.set_status(state, description, check_name, url) @@ -244,7 +267,8 @@ def test_set_status_github_check( status=check_status, conclusion=check_conclusion, output=create_github_check_run_output( - title, summary + "\n\n---\n*Interesting news.*" + title, + summary + "\n\n---\n*Interesting news.*", ), ).once() @@ -315,7 +339,12 @@ def test_commit_comment_instead_of_status( setattr(exception, key, value) project.should_receive("set_commit_status").with_args( - commit_sha, state_to_set, url, description, check_name, trim=True + commit_sha, + state_to_set, + url, + description, + check_name, + trim=True, ).and_raise(exception).once() project.should_receive("commit_comment").with_args( commit=commit_sha, @@ -324,7 +353,7 @@ def test_commit_comment_instead_of_status( f"- name: {check_name}", f"- state: {state.name}", f"- url: {url if url else 'not provided'}", - ] + ], ) + f"\n\n{description}", ) @@ -366,7 +395,10 @@ def test_report_status_by_comment( ): project = GitlabProject(None, None, None) reporter = StatusReporter.get_instance( - project=project, commit_sha=commit_sha, pr_id=pr_id, packit_user="packit" + project=project, + commit_sha=commit_sha, + pr_id=pr_id, + packit_user="packit", ) act_upon = flexmock(GitlabProject) @@ -377,12 +409,12 @@ def test_report_status_by_comment( f"| [{check_names}]({url}) | {result} |", "### Description\n", "should include this", - ) + ), ) if pr_id: act_upon.should_receive("get_pr").with_args(pr_id).and_return( - flexmock().should_receive("comment").with_args(body=comment_body).mock() + flexmock().should_receive("comment").with_args(body=comment_body).mock(), ).once() else: act_upon.should_receive("commit_comment").with_args( @@ -460,12 +492,18 @@ def test_status_instead_check( status=check_status, conclusion=check_conclusion, output=create_github_check_run_output( - title, summary + "\n\n---\n*Interesting news.*" + title, + summary + "\n\n---\n*Interesting news.*", ), ).and_raise(exception_type).once() act_upon.should_receive("set_commit_status").with_args( - commit_sha, commit_state_to_set, url, title, check_name, trim=True + commit_sha, + commit_state_to_set, + url, + title, + check_name, + trim=True, ).once() reporter.set_status(state, title, check_name, url) @@ -617,7 +655,7 @@ def test_comment(pr_id, commit_sha, duplicate_check, existing_comments, should_c act_upon.should_receive("get_pr").with_args(pr_id).and_return(pr) if duplicate_check != DuplicateCheckMode.do_not_check: flexmock(pr).should_receive("get_comments").with_args( - reverse=True + reverse=True, ).and_return(existing_comments) if should_comment: @@ -627,7 +665,7 @@ def test_comment(pr_id, commit_sha, duplicate_check, existing_comments, should_c else: if duplicate_check != DuplicateCheckMode.do_not_check: act_upon.should_receive("get_commit_comments").with_args( - commit_sha + commit_sha, ).and_return(existing_comments) if should_comment: @@ -646,12 +684,14 @@ def test_comment(pr_id, commit_sha, duplicate_check, existing_comments, should_c ], ) def test_update_message_with_configured_failure_comment_message( - comment, configured_message, result + comment, + configured_message, + result, ): job_config = flexmock( notifications=NotificationsConfig( - failure_comment=FailureCommentNotificationsConfig(configured_message) - ) + failure_comment=FailureCommentNotificationsConfig(configured_message), + ), ) assert ( update_message_with_configured_failure_comment_message(comment, job_config) diff --git a/tests/unit/test_scan.py b/tests/unit/test_scan.py new file mode 100644 index 000000000..ad42e4c9e --- /dev/null +++ b/tests/unit/test_scan.py @@ -0,0 +1,92 @@ +# Copyright Contributors to the Packit project. +# SPDX-License-Identifier: MIT + +import pytest +from flexmock import flexmock + +from packit.api import PackitAPI +from packit.config import JobType, JobConfigTriggerType +from packit_service.models import ( + CoprBuildTargetModel, + ProjectEventModelType, + BuildStatus, +) +from packit_service.worker.events import AbstractCoprBuildEvent +from packit_service.worker.handlers import copr +from packit_service.worker.handlers.copr import ScanHelper +from packit_service.worker.helpers.build import CoprBuildJobHelper + + +@pytest.mark.parametrize( + "build_models", + [ + [("abcdef", [flexmock(get_srpm_build=lambda: flexmock(url="base-srpm-url"))])], + [ + ("abcdef", []), + ( + "fedcba", + [flexmock(get_srpm_build=lambda: flexmock(url="base-srpm-url"))], + ), + ], + ], +) +def test_handle_scan(build_models): + srpm_mock = flexmock(url="https://some-url/my-srpm.src.rpm") + flexmock(AbstractCoprBuildEvent).should_receive("from_event_dict").and_return( + flexmock(chroot="fedora-rawhide-x86_64", build_id="123", pr_id=12), + ) + flexmock(copr).should_receive("download_file").twice().and_return(True) + + for commit_sha, models in build_models: + flexmock(CoprBuildTargetModel).should_receive("get_all_by").with_args( + commit_sha=commit_sha, + project_name="commit-project", + owner="user-123", + target="fedora-rawhide-x86_64", + status=BuildStatus.success, + ).and_return(models).once() + + flexmock(PackitAPI).should_receive("run_osh_build").once().and_return( + 'some\nmultiline\noutput\n{"id": 123}\nand\nmore\n{"url": "scan-url"}\n', + ) + + flexmock(CoprBuildJobHelper).should_receive("_report") + package_config = flexmock( + get_job_views=lambda: [ + flexmock( + type=JobType.copr_build, + trigger=JobConfigTriggerType.commit, + branch="main", + project="commit-project", + owner="user-123", + ), + ], + ) + + project = flexmock( + get_pr=lambda pr_id: flexmock( + target_branch="main", + target_branch_head_commit="abcdef", + ), + get_commits=lambda ref: ["abcdef", "fedcba"], + ) + + ScanHelper( + build=flexmock( + id=1, + get_srpm_build=lambda: srpm_mock, + target="fedora-rawhide-x86_64", + get_project_event_model=lambda: flexmock( + type=ProjectEventModelType.pull_request, + get_project_event_object=lambda: flexmock(), + ), + ), + copr_build_helper=CoprBuildJobHelper( + service_config=flexmock(), + package_config=package_config, + project=project, + metadata=flexmock(pr_id=12), + db_project_event=flexmock(get_project_event_object=lambda: None), + job_config=flexmock(), + ), + ).handle_scan() diff --git a/tests/unit/test_srpm_logs.py b/tests/unit/test_srpm_logs.py index fd5a171d3..c9e98222b 100644 --- a/tests/unit/test_srpm_logs.py +++ b/tests/unit/test_srpm_logs.py @@ -53,9 +53,9 @@ def build_helper( _targets=_targets, owner="nobody", scratch=scratch, - ) + ), }, - ) + ), ) pkg_conf = PackageConfig( @@ -88,7 +88,7 @@ def mock_packit_log(*args, **kwargs): def inspect_log_date_format(logs=None, **_): timestamp_reg = re.compile( - r"[0-9]+-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]+\s.*" + r"[0-9]+-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]+\s.*", ) log_lines = 0 @@ -105,7 +105,8 @@ def inspect_log_date_format(logs=None, **_): return (None, None) db_project_object = flexmock( - job_config_trigger_type=JobConfigTriggerType.pull_request, pr_id=123 + job_config_trigger_type=JobConfigTriggerType.pull_request, + pr_id=123, ) helper = build_helper( event=github_pr_event, @@ -118,7 +119,7 @@ def inspect_log_date_format(logs=None, **_): ) flexmock(GitProject).should_receive("get_pr").and_return( - flexmock(target_branch="main") + flexmock(target_branch="main"), ) flexmock(GitProject).should_receive("set_commit_status").and_return().never() local_project = flexmock() @@ -142,6 +143,6 @@ def inspect_log_date_format(logs=None, **_): .mock() ) flexmock(SRPMBuildModel).should_receive("create_with_new_run").and_return( - (srpm_model_mock(), None) + (srpm_model_mock(), None), ) helper._create_srpm() diff --git a/tests/unit/test_steve.py b/tests/unit/test_steve.py index 828750092..2743be7bd 100644 --- a/tests/unit/test_steve.py +++ b/tests/unit/test_steve.py @@ -98,14 +98,14 @@ def test_process_message(event, private, enabled_private_namespaces, success): .times(1 if success else 0) .mock(), git=flexmock(clear_cache=lambda: None), - ) + ), ) ServiceConfig().get_service_config().enabled_private_namespaces = ( enabled_private_namespaces ) flexmock(PagureProject).should_receive("_call_project_api").and_return( - {"default": "main"} + {"default": "main"}, ) run_model = flexmock(PipelineModel) @@ -121,7 +121,9 @@ def test_process_message(event, private, enabled_private_namespaces, success): .mock() ) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.release, event_id=12, commit_sha="12345" + type=ProjectEventModelType.release, + event_id=12, + commit_sha="12345", ).and_return(db_project_event) flexmock(ProjectReleaseModel).should_receive("get_or_create").with_args( tag_name="1.2.3", @@ -140,7 +142,8 @@ def test_process_message(event, private, enabled_private_namespaces, success): model = flexmock(status="queued", id=1234, branch="main") flexmock(SyncReleaseTargetModel).should_receive("create").with_args( - status=SyncReleaseTargetStatus.queued, branch="main" + status=SyncReleaseTargetStatus.queued, + branch="main", ).and_return(model).times(1 if success else 0) sync_release_pr_model = flexmock(sync_release_targets=[flexmock(), flexmock()]) flexmock(SyncReleasePullRequestModel).should_receive("get_or_create").with_args( @@ -150,22 +153,22 @@ def test_process_message(event, private, enabled_private_namespaces, success): project_url="https://src.fedoraproject.org/rpms/downstream-repo", ).and_return(sync_release_pr_model).times(1 if success else 0) flexmock(model).should_receive("set_downstream_pr_url").with_args( - downstream_pr_url="some_url" + downstream_pr_url="some_url", ).times(1 if success else 0) flexmock(model).should_receive("set_downstream_pr").with_args( - downstream_pr=sync_release_pr_model + downstream_pr=sync_release_pr_model, ).times(1 if success else 0) flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.running + status=SyncReleaseTargetStatus.running, ).times(1 if success else 0) flexmock(model).should_receive("set_start_time").times(1 if success else 0) flexmock(model).should_receive("set_finished_time").times(1 if success else 0) flexmock(model).should_receive("set_logs").times(1 if success else 0) flexmock(model).should_receive("set_status").with_args( - status=SyncReleaseTargetStatus.submitted + status=SyncReleaseTargetStatus.submitted, ).times(1 if success else 0) flexmock(propose_downstream_model).should_receive("set_status").with_args( - status=SyncReleaseStatus.finished + status=SyncReleaseStatus.finished, ).times(1 if success else 0) target_project = ( flexmock(namespace="downstream-namespace", repo="downstream-repo") @@ -200,7 +203,7 @@ def test_process_message(event, private, enabled_private_namespaces, success): flexmock(group).should_receive("apply_async").times(1 if success else 0) flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_to_all" + "report_status_to_all", ).with_args( description=TASK_ACCEPTED, state=BaseCommitStatus.pending, @@ -209,31 +212,31 @@ def test_process_message(event, private, enabled_private_namespaces, success): links_to_external_services=None, update_feedback_time=object, ).times( - 1 if success else 0 + 1 if success else 0, ) flexmock(Pushgateway).should_receive("push").times(3 if success else 1) url = get_propose_downstream_info_url(model.id) flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_for_branch" + "report_status_for_branch", ).with_args( branch="main", description="Starting propose downstream...", state=BaseCommitStatus.running, url=url, ).times( - 1 if success else 0 + 1 if success else 0, ) flexmock(ProposeDownstreamJobHelper).should_receive( - "report_status_for_branch" + "report_status_for_branch", ).with_args( branch="main", description="Propose downstream finished successfully.", state=BaseCommitStatus.success, url=url, ).times( - 1 if success else 0 + 1 if success else 0, ) processing_results = SteveJobs().process_message(event) @@ -242,7 +245,7 @@ def test_process_message(event, private, enabled_private_namespaces, success): return event_dict, job, job_config, package_config = get_parameters_from_results( - processing_results + processing_results, ) assert json.dumps(event_dict) diff --git a/tests/unit/test_tasks.py b/tests/unit/test_tasks.py index 2f91f418a..43c85aa8f 100644 --- a/tests/unit/test_tasks.py +++ b/tests/unit/test_tasks.py @@ -14,7 +14,7 @@ def test_autoretry(): flexmock(prometheus_client).should_receive("push_to_gateway") flexmock(CoprBuildHandler).should_receive("run_job").and_raise( - CoprRequestException + CoprRequestException, ).once() # verify that retry is called automatically diff --git a/tests/unit/test_testing_farm.py b/tests/unit/test_testing_farm.py index e59165b50..0daddc9be 100644 --- a/tests/unit/test_testing_farm.py +++ b/tests/unit/test_testing_farm.py @@ -97,8 +97,9 @@ def test_testing_farm_response( trigger=JobConfigTriggerType.pull_request, packages={ "package": CommonPackageConfig( - identifier=None, _targets=["fedora-rawhide"] - ) + identifier=None, + _targets=["fedora-rawhide"], + ), }, ), ], @@ -107,21 +108,22 @@ def test_testing_farm_response( }, ) flexmock(PackageConfigGetter).should_receive( - "get_package_config_from_repo" + "get_package_config_from_repo", ).and_return(package_config) config = flexmock( - command_handler_work_dir=flexmock(), comment_command_prefix="/packit" + command_handler_work_dir=flexmock(), + comment_command_prefix="/packit", ) flexmock(TFResultsHandler).should_receive("service_config").and_return(config) flexmock(TFResultsEvent).should_receive("db_project_object").and_return(None) config.should_receive("get_project").with_args( - url="https://github.com/packit/ogr" + url="https://github.com/packit/ogr", ).and_return( flexmock( service=flexmock(instance_url="https://github.com"), namespace="packit", repo="ogr", - ) + ), ) config.should_receive("get_github_account_name").and_return("packit-as-a-service") created_dt = datetime.now(timezone.utc) @@ -146,7 +148,7 @@ def test_testing_farm_response( packages={ "package": CommonPackageConfig( identifier=None, - ) + ), }, ), event=event_dict, @@ -179,24 +181,25 @@ def test_testing_farm_response( job_config_trigger_type=JobConfigTriggerType.pull_request, project_event_model_type=ProjectEventModelType.pull_request, commit_sha="0000000000", - ) + ), ) - .mock() + .mock(), ) .mock() ) tft_test_run_model.should_receive("set_status").with_args( - tests_result, created=created_dt + tests_result, + created=created_dt, ).and_return().once() tft_test_run_model.should_receive("set_web_url").with_args( - "some url" + "some url", ).and_return().once() flexmock(TFTTestRunTargetModel).should_receive("get_by_pipeline_id").and_return( - tft_test_run_model + tft_test_run_model, ) flexmock(ProjectEventModel).should_receive("get_or_create").and_return( - flexmock(id=1, type=ProjectEventModelType.pull_request) + flexmock(id=1, type=ProjectEventModelType.pull_request), ) flexmock(LocalProject).should_receive("refresh_the_arguments").and_return(None) @@ -250,7 +253,7 @@ def test_distro2compose(target, compose, use_internal_tf): packages={ "package": CommonPackageConfig( use_internal_tf=use_internal_tf, - ) + ), }, ), ) @@ -259,7 +262,7 @@ def test_distro2compose(target, compose, use_internal_tf): response = flexmock(status_code=200, json=lambda: {"composes": [{"name": compose}]}) endpoint = "composes/redhat" if use_internal_tf else "composes/public" job_helper.should_receive("send_testing_farm_request").with_args( - endpoint=endpoint + endpoint=endpoint, ).and_return(response).once() assert job_helper.distro2compose(target) == compose @@ -476,7 +479,7 @@ def test_is_compose_matching(compose, composes, result): "id": "123456:centos-stream-x86_64", "type": "fedora-copr-build", "packages": ["cool-project-0:0.1.0-2.el8.x86_64"], - } + }, ], None, None, @@ -803,7 +806,7 @@ def test_payload( tmt_plan=tmt_plan, tf_post_install_script=tf_post_install_script, tf_extra_params=tf_extra_params, - ) + ), }, ), ) @@ -832,7 +835,7 @@ def test_payload( "release": "1", "arch": "noarch", "epoch": "0", - } + }, ], build_logs_url=log_url, owner="builder", @@ -841,7 +844,10 @@ def test_payload( copr_build.should_receive("get_srpm_build").and_return(flexmock(url=srpm_url)) payload = job_helper._payload( - target=chroot, compose=compose, artifacts=artifacts, build=copr_build + target=chroot, + compose=compose, + artifacts=artifacts, + build=copr_build, ) assert payload["api_key"] == token_to_use @@ -868,7 +874,7 @@ def test_payload( "arch": arch, "trigger": "commit", "initiator": "packit", - } + }, }, "variables": { "PACKIT_BUILD_LOG_URL": log_url, @@ -887,14 +893,14 @@ def test_payload( "PACKIT_COPR_PROJECT": "builder/some_package", "MY_ENV_VARIABLE": "my-value", }, - } + }, ] if copr_rpms: expected_environments[0]["variables"]["PACKIT_COPR_RPMS"] = copr_rpms if tf_post_install_script: expected_environments[0]["settings"] = { - "provisioning": {"post_install_script": tf_post_install_script} + "provisioning": {"post_install_script": tf_post_install_script}, } if comment is not None: @@ -945,10 +951,10 @@ def test_payload( { "id": "123:fedora-37", "type": "fedora-copr-build", - } + }, ], - } - ] + }, + ], }, { "environments": [ @@ -958,13 +964,13 @@ def test_payload( "type": "repository", "id": "123:fedora-37", "packages": "some-nvr", - } + }, ], "settings": { - "provisioning": {"tags": {"BusinessUnit": "sst_upgrades"}} + "provisioning": {"tags": {"BusinessUnit": "sst_upgrades"}}, }, - } - ] + }, + ], }, { "environments": [ @@ -982,10 +988,10 @@ def test_payload( }, ], "settings": { - "provisioning": {"tags": {"BusinessUnit": "sst_upgrades"}} + "provisioning": {"tags": {"BusinessUnit": "sst_upgrades"}}, }, - } - ] + }, + ], }, ), ], @@ -1006,7 +1012,10 @@ def test_merge_extra_params_with_install(): package_config = flexmock() project = flexmock(full_repo_name="test/merge") metadata = flexmock( - commit_sha="0000000", pr_id=None, tag_name=None, event_dict={"comment": ""} + commit_sha="0000000", + pr_id=None, + tag_name=None, + event_dict={"comment": ""}, ) db_project_event = ( flexmock() @@ -1029,8 +1038,8 @@ def test_merge_extra_params_with_install(): ), tf_extra_params={ "environments": [ - {"tmt": {"context": {"distro": "rhel-7.9"}}, "settings": tf_settings} - ] + {"tmt": {"context": {"distro": "rhel-7.9"}}, "settings": tf_settings}, + ], }, ) helper = TFJobHelper( @@ -1130,7 +1139,13 @@ def test_merge_extra_params_with_install(): ], ) def test_test_repo( - fmf_url, fmf_ref, fmf_path, result_url, result_ref, result_path, merge_pr_in_ci + fmf_url, + fmf_ref, + fmf_path, + result_url, + result_ref, + result_path, + merge_pr_in_ci, ): tf_api = "https://api.dev.testing-farm.io/v0.1/" tf_token = "very-secret" @@ -1200,7 +1215,7 @@ def test_test_repo( fmf_ref=fmf_ref, fmf_path=fmf_path, merge_pr_in_ci=merge_pr_in_ci, - ) + ), }, ), ) @@ -1225,7 +1240,7 @@ def test_test_repo( "release": "1", "arch": "noarch", "epoch": "0", - } + }, ], build_logs_url=log_url, owner="mf", @@ -1256,7 +1271,7 @@ def test_get_request_details(): request = { "id": request_id, "environments_requested": [ - {"arch": "x86_64", "os": {"compose": "Fedora-Rawhide"}} + {"arch": "x86_64", "os": {"compose": "Fedora-Rawhide"}}, ], "result": {"overall": "passed", "summary": "all ok"}, } @@ -1304,13 +1319,13 @@ def test_get_request_details(): target="foo", status=TestingFarmResult.new, copr_builds=[ - flexmock(status=BuildStatus.success) + flexmock(status=BuildStatus.success), ], - ) - ] - ) - ) - ] + ), + ], + ), + ), + ], ), ), False, @@ -1327,7 +1342,7 @@ def test_trigger_build(copr_build, wait_for_build): packages={ "package": CommonPackageConfig( spec_source_id=1, - ) + ), }, ) job_config._files_to_sync_used = False @@ -1344,7 +1359,7 @@ def test_trigger_build(copr_build, wait_for_build): if copr_build and copr_build.status == BuildStatus.success: flexmock(TFJobHelper).should_receive("run_testing_farm").and_return( - TaskResults(success=True, details={}) + TaskResults(success=True, details={}), ).twice() targets = {"target-x86_64", "another-target-x86_64"} tests = [] @@ -1355,24 +1370,24 @@ def test_trigger_build(copr_build, wait_for_build): flexmock( id=1, status=copr_build.status if copr_build else BuildStatus.pending, - ) + ), ], target=target, status=TestingFarmResult.new, - ) + ), ) flexmock(TFTTestRunTargetModel).should_receive("create").and_return( - *tests + *tests, ).one_by_one() flexmock(PipelineModel).should_receive("create").and_return(flexmock()) flexmock(TFTTestRunGroupModel).should_receive("create").and_return( - flexmock(grouped_targets=tests) + flexmock(grouped_targets=tests), ) if wait_for_build: for target in targets: flexmock(TFJobHelper).should_receive( - "report_status_to_tests_for_test_target" + "report_status_to_tests_for_test_target", ).with_args( state=BaseCommitStatus.pending, description="The latest build has not finished yet, " @@ -1390,7 +1405,7 @@ def test_trigger_build(copr_build, wait_for_build): celery_task=flexmock(request=flexmock(retries=0)), ) flexmock(tf_handler).should_receive("project").and_return( - flexmock().should_receive("get_web_url").and_return("https://foo.bar").mock() + flexmock().should_receive("get_web_url").and_return("https://foo.bar").mock(), ) tf_handler._db_project_object = flexmock( job_config_trigger_type=JobConfigTriggerType.pull_request, @@ -1417,7 +1432,7 @@ def test_trigger_build_manual_tests_dont_report(): packages={ "package": CommonPackageConfig( spec_source_id=1, - ) + ), }, ) job_config._files_to_sync_used = False @@ -1441,23 +1456,23 @@ def test_trigger_build_manual_tests_dont_report(): flexmock( id=1, status=copr_build.status if copr_build else BuildStatus.pending, - ) + ), ], target=target, status=TestingFarmResult.new, - ) + ), ) flexmock(TFTTestRunTargetModel).should_receive("create").and_return( - *tests + *tests, ).one_by_one() flexmock(PipelineModel).should_receive("create").and_return(flexmock()) flexmock(TFTTestRunGroupModel).should_receive("create").and_return( - flexmock(grouped_targets=tests) + flexmock(grouped_targets=tests), ) for target in targets: flexmock(TFJobHelper).should_receive( - "report_status_to_tests_for_test_target" + "report_status_to_tests_for_test_target", ).with_args( state=BaseCommitStatus.neutral, description="The latest build has not finished yet. " @@ -1475,7 +1490,7 @@ def test_trigger_build_manual_tests_dont_report(): celery_task=flexmock(request=flexmock(retries=0)), ) flexmock(tf_handler).should_receive("project").and_return( - flexmock().should_receive("get_web_url").and_return("https://foo.bar").mock() + flexmock().should_receive("get_web_url").and_return("https://foo.bar").mock(), ) tf_handler._db_project_object = flexmock( job_config_trigger_type=JobConfigTriggerType.pull_request, @@ -1503,7 +1518,7 @@ def test_fmf_url(job_fmf_url, pr_id, fmf_url): packages={ "package": CommonPackageConfig( fmf_url=job_fmf_url, - ) + ), }, ) metadata = flexmock(pr_id=pr_id) @@ -1517,12 +1532,12 @@ def test_fmf_url(job_fmf_url, pr_id, fmf_url): source_project=flexmock() .should_receive("get_web_url") .and_return(fmf_url) - .mock() - ) + .mock(), + ), ) else: git_project.should_receive("get_web_url").and_return( - "https://github.com/packit/packit" + "https://github.com/packit/packit", ).once() helper = TFJobHelper( @@ -1547,11 +1562,11 @@ def test_get_additional_builds(): packages={ "package": CommonPackageConfig( _targets=["test-target", "another-test-target"], - ) + ), }, ) metadata = flexmock( - event_dict={"comment": "/packit-dev test my-namespace/my-repo#10"} + event_dict={"comment": "/packit-dev test my-namespace/my-repo#10"}, ) git_project = flexmock() @@ -1581,16 +1596,16 @@ def test_get_additional_builds(): ).and_return(pr) flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( - {"test-target", "another-test-target"} + {"test-target", "another-test-target"}, ) flexmock(packit_service.worker.helpers.testing_farm).should_receive( - "filter_most_recent_target_models_by_status" + "filter_most_recent_target_models_by_status", ).with_args( models=[additional_copr_build], statuses_to_filter_with=[BuildStatus.success], ).and_return( - {additional_copr_build} + {additional_copr_build}, ).once() additional_copr_builds = helper.get_copr_builds_from_other_pr() @@ -1606,11 +1621,11 @@ def test_get_additional_builds_pr_not_in_db(): packages={ "package": CommonPackageConfig( _targets=["test-target", "another-test-target"], - ) + ), }, ) metadata = flexmock( - event_dict={"comment": "/packit-dev test my-namespace/my-repo#10"} + event_dict={"comment": "/packit-dev test my-namespace/my-repo#10"}, ) git_project = flexmock() @@ -1646,11 +1661,11 @@ def test_get_additional_builds_builds_not_in_db(): packages={ "package": CommonPackageConfig( _targets=["test-target", "another-test-target"], - ) + ), }, ) metadata = flexmock( - event_dict={"comment": "/packit-dev test my-namespace/my-repo#10"} + event_dict={"comment": "/packit-dev test my-namespace/my-repo#10"}, ) git_project = flexmock() @@ -1676,10 +1691,10 @@ def test_get_additional_builds_builds_not_in_db(): flexmock(id=16, job_config_trigger_type=JobConfigTriggerType.pull_request) .should_receive("get_copr_builds") .and_return([]) - .mock() + .mock(), ) flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( - {"test-target", "another-test-target"} + {"test-target", "another-test-target"}, ) additional_copr_builds = helper.get_copr_builds_from_other_pr() @@ -1693,11 +1708,11 @@ def test_get_additional_builds_wrong_format(): packages={ "package": CommonPackageConfig( _targets=["test-target", "another-test-target"], - ) + ), }, ) metadata = flexmock( - event_dict={"comment": "/packit-dev test my/namespace/my-repo#10"} + event_dict={"comment": "/packit-dev test my/namespace/my-repo#10"}, ) git_project = flexmock() @@ -1802,7 +1817,7 @@ def test_get_additional_builds_wrong_format(): "id": "123456:centos-stream-x86_64", "type": "fedora-copr-build", "packages": ["cool-project-0.1.0-2.el8.x86_64"], - } + }, ], ), ], @@ -1814,11 +1829,11 @@ def test_get_artifacts(chroot, build, additional_build, result): packages={ "package": CommonPackageConfig( _targets=["test-target", "another-test-target"], - ) + ), }, ) metadata = flexmock( - event_dict={"comment": "/packit-dev test my/namespace/my-repo#10"} + event_dict={"comment": "/packit-dev test my/namespace/my-repo#10"}, ) git_project = flexmock() @@ -1836,7 +1851,9 @@ def test_get_artifacts(chroot, build, additional_build, result): ) artifacts = helper._get_artifacts( - chroot=chroot, build=build, additional_build=additional_build + chroot=chroot, + build=build, + additional_build=additional_build, ) assert artifacts == result @@ -1858,7 +1875,7 @@ def test_get_artifacts(chroot, build, additional_build, result): packages={ "package": CommonPackageConfig( use_internal_tf=True, - ) + ), }, ), ], @@ -1879,7 +1896,7 @@ def test_get_artifacts(chroot, build, additional_build, result): packages={ "package": CommonPackageConfig( identifier="public", - ) + ), }, ), JobConfig( @@ -1888,7 +1905,7 @@ def test_get_artifacts(chroot, build, additional_build, result): packages={ "package": CommonPackageConfig( use_internal_tf=True, - ) + ), }, ), ], @@ -1909,7 +1926,7 @@ def test_get_artifacts(chroot, build, additional_build, result): packages={ "package": CommonPackageConfig( identifier="public", - ) + ), }, ), JobConfig( @@ -1919,7 +1936,7 @@ def test_get_artifacts(chroot, build, additional_build, result): packages={ "package": CommonPackageConfig( use_internal_tf=True, - ) + ), }, ), ], @@ -1941,7 +1958,7 @@ def test_get_artifacts(chroot, build, additional_build, result): packages={ "package": CommonPackageConfig( identifier="public", - ) + ), }, manual_trigger=False, ), @@ -1953,7 +1970,7 @@ def test_get_artifacts(chroot, build, additional_build, result): packages={ "package": CommonPackageConfig( use_internal_tf=True, - ) + ), }, ), ], @@ -1973,15 +1990,17 @@ def test_check_if_actor_can_run_job_and_report(jobs, event, should_pass): project_event_model_type=ProjectEventModelType.pull_request, ) flexmock(ProjectEventModel).should_receive("get_or_create").with_args( - type=ProjectEventModelType.pull_request, event_id=123, commit_sha="abcdef" + type=ProjectEventModelType.pull_request, + event_id=123, + commit_sha="abcdef", ).and_return( flexmock() .should_receive("get_project_event_object") .and_return(db_project_object) - .mock() + .mock(), ) flexmock(PullRequestModel).should_receive("get_or_create").and_return( - db_project_object + db_project_object, ) gh_project = flexmock(namespace="n", repo="r") @@ -2026,7 +2045,7 @@ def test_is_supported_architecture(target, use_internal_tf, supported): packages={ "package": CommonPackageConfig( use_internal_tf=use_internal_tf, - ) + ), }, ), ) @@ -2113,7 +2132,7 @@ def test_parse_comment_arguments( packages={ "package": CommonPackageConfig( _targets=["test-target", "another-test-target"], - ) + ), }, ) metadata = flexmock(event_dict={"comment": comment}) diff --git a/tests/unit/test_views.py b/tests/unit/test_views.py index f7bb27ac2..3052a9298 100644 --- a/tests/unit/test_views.py +++ b/tests/unit/test_views.py @@ -65,7 +65,13 @@ def test_get_logs(client): srpm_build_mock.id = 11 srpm_build_mock.url = "https://some.random.copr.subdomain.org/my_srpm.srpm" srpm_build_mock.build_submitted_time = datetime( - year=2020, month=1, day=1, hour=0, minute=0, second=0, microsecond=0 + year=2020, + month=1, + day=1, + hour=0, + minute=0, + second=0, + microsecond=0, ) copr_build_mock = flexmock() @@ -78,7 +84,13 @@ def test_get_logs(client): copr_build_mock.build_logs_url = "https://localhost:5000/build/2/foo-1-x86_64/logs" copr_build_mock.owner = "packit" copr_build_mock.build_submitted_time = datetime( - year=2020, month=1, day=1, hour=0, minute=0, second=0, microsecond=0 + year=2020, + month=1, + day=1, + hour=0, + minute=0, + second=0, + microsecond=0, ) copr_build_mock.project_name = "example_project" copr_build_mock.should_receive("get_project_event_object").and_return(pr_mock) @@ -86,7 +98,7 @@ def test_get_logs(client): copr_build_mock.should_receive("get_srpm_build").and_return(srpm_build_mock) flexmock(CoprBuildTargetModel).should_receive("get_by_id").and_return( - copr_build_mock + copr_build_mock, ) logs_url = get_copr_build_info_url(1) diff --git a/tests/unit/test_webhooks.py b/tests/unit/test_webhooks.py index d22c6e4d1..b8372eead 100644 --- a/tests/unit/test_webhooks.py +++ b/tests/unit/test_webhooks.py @@ -26,14 +26,14 @@ def mock_config(): ( { "X-Hub-Signature-256": "sha256=" - "7884c9fc5f880c17920b2066e85aae7b57489505a16aa9b56806a924df78f846" + "7884c9fc5f880c17920b2066e85aae7b57489505a16aa9b56806a924df78f846", }, True, ), ( { "X-Hub-Signature-256": "sha256=" - "feedfacecafebeef920b2066e85aae7b57489505a16aa9b56806a924df78f666" + "feedfacecafebeef920b2066e85aae7b57489505a16aa9b56806a924df78f666", }, False, ), @@ -43,7 +43,7 @@ def mock_config(): def test_validate_signature(mock_config, headers, is_good): # flexmock config before import as it fails on looking for config flexmock(ServiceConfig).should_receive("get_service_config").and_return( - flexmock(validate_webhooks=True) + flexmock(validate_webhooks=True), ) from packit_service.service.api import webhooks @@ -71,7 +71,7 @@ def test_validate_signature(mock_config, headers, is_good): # "gitlab-token-secret", algorithm="HS256") "X-Gitlab-Token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9." "eyJuYW1lc3BhY2UiOiJtdWx0aS9wYXJ0L25hbWVzcGFjZSIsInJlcG9fbmFtZSI6InJlcG8ifQ." - "r5-khuzdQJ3b15KZt3E1AqFXjtKfFn_Q1BBwkq04Mf8" + "r5-khuzdQJ3b15KZt3E1AqFXjtKfFn_Q1BBwkq04Mf8", }, True, ), @@ -82,7 +82,7 @@ def test_validate_signature(mock_config, headers, is_good): # "gitlab-token-secret", algorithm="HS256") "X-Gitlab-Token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9." "eyJuYW1lc3BhY2UiOiJtdWx0aS9wYXJ0L25hbWVzcGFjZSJ9." - "WNasZgIU91hMwKtGeGCILjPIDLU-PpL5rww-BEAzMgU" + "WNasZgIU91hMwKtGeGCILjPIDLU-PpL5rww-BEAzMgU", }, True, ), @@ -93,7 +93,7 @@ def test_validate_signature(mock_config, headers, is_good): # "gitlab-token-secret", algorithm="HS256") "X-Gitlab-Token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9." "eyJuYW1lc3BhY2UiOiJtdWx0aS9wYXJ0L25hbWVzcGFjZSIsInJlcG9fbmFtZSI6InJlcG8yIn0." - "vyQYbtmaCyHfDKpfmyk_uAn9QvDulnaIy2wZ1xgc-uI" + "vyQYbtmaCyHfDKpfmyk_uAn9QvDulnaIy2wZ1xgc-uI", }, False, ), @@ -104,14 +104,14 @@ def test_validate_signature(mock_config, headers, is_good): def test_validate_token(mock_config, headers, is_good): # flexmock config before import as it fails on looking for config flexmock(ServiceConfig).should_receive("get_service_config").and_return( - flexmock(ServiceConfig) + flexmock(ServiceConfig), ) from packit_service.service.api import webhooks if "X-Gitlab-Token" not in headers and not is_good: flexmock(webhooks.GitlabWebhook).should_receive( - "create_confidential_issue_with_token" + "create_confidential_issue_with_token", ).mock() webhooks.config = mock_config @@ -121,7 +121,7 @@ def test_validate_token(mock_config, headers, is_good): payload = { "project": { "http_url": "https://gitlab.com/multi/part/namespace/repo.git", - } + }, } request._cached_data = request.data = dumps(payload).encode() request.headers = headers @@ -233,7 +233,7 @@ def test_validate_token(mock_config, headers, is_good): def test_interested(mock_config, headers, payload, interested): # flexmock config before import as it fails on looking for config flexmock(ServiceConfig).should_receive("get_service_config").and_return( - flexmock(ServiceConfig) + flexmock(ServiceConfig), ) from packit_service.service.api import webhooks @@ -241,6 +241,8 @@ def test_interested(mock_config, headers, payload, interested): webhooks.config = mock_config with Flask(__name__).test_request_context( - json=payload, content_type="application/json", headers=headers + json=payload, + content_type="application/json", + headers=headers, ): assert webhooks.GithubWebhook.interested() == interested diff --git a/tests_openshift/conftest.py b/tests_openshift/conftest.py index f9e07145b..6e2ea343d 100644 --- a/tests_openshift/conftest.py +++ b/tests_openshift/conftest.py @@ -336,7 +336,8 @@ def branch_model_gitlab(): @pytest.fixture() def propose_model(): yield SyncReleaseTargetModel.create( - status=SyncReleaseTargetStatus.running, branch=SampleValues.branch + status=SyncReleaseTargetStatus.running, + branch=SampleValues.branch, ) @@ -359,7 +360,8 @@ def pull_from_upstream_target_model(release_project_event_model): ) target_model = SyncReleaseTargetModel.create( - status=SyncReleaseTargetStatus.submitted, branch=SampleValues.branch + status=SyncReleaseTargetStatus.submitted, + branch=SampleValues.branch, ) sync_release_pull_request_model = SyncReleasePullRequestModel.get_or_create( SampleValues.downstream_pr_id, @@ -385,7 +387,8 @@ def pull_from_upstream_target_model_non_git(anitya_version_project_event_model): ) target_model = SyncReleaseTargetModel.create( - status=SyncReleaseTargetStatus.submitted, branch=SampleValues.branch + status=SyncReleaseTargetStatus.submitted, + branch=SampleValues.branch, ) sync_release_pull_request_model = SyncReleasePullRequestModel.get_or_create( SampleValues.downstream_pr_id, @@ -411,7 +414,8 @@ def pull_from_upstream_target_model_without_pr_model(release_project_event_model ) target_model = SyncReleaseTargetModel.create( - status=SyncReleaseTargetStatus.submitted, branch=SampleValues.branch + status=SyncReleaseTargetStatus.submitted, + branch=SampleValues.branch, ) target_model.set_finished_time(finished_time=datetime.datetime.utcnow()) target_model.set_logs(logs="random logs") @@ -433,7 +437,8 @@ def propose_downstream_model_issue(an_issue_project_event_model): @pytest.fixture() def propose_model_submitted(): propose_downstream_target = SyncReleaseTargetModel.create( - status=SyncReleaseTargetStatus.submitted, branch=SampleValues.branch + status=SyncReleaseTargetStatus.submitted, + branch=SampleValues.branch, ) sync_release_pull_request_model = SyncReleasePullRequestModel.get_or_create( SampleValues.downstream_pr_id, @@ -442,11 +447,11 @@ def propose_model_submitted(): SampleValues.downstream_project_url, ) propose_downstream_target.set_downstream_pr_url( - downstream_pr_url=SampleValues.downstream_pr_url + downstream_pr_url=SampleValues.downstream_pr_url, ) propose_downstream_target.set_downstream_pr(sync_release_pull_request_model) propose_downstream_target.set_finished_time( - finished_time=datetime.datetime.utcnow() + finished_time=datetime.datetime.utcnow(), ) propose_downstream_target.set_logs(logs="random logs") @@ -455,7 +460,8 @@ def propose_model_submitted(): @pytest.fixture() def propose_model_submitted_release( - propose_downstream_model_release, propose_model_submitted + propose_downstream_model_release, + propose_model_submitted, ): propose_downstream = propose_downstream_model_release propose_downstream_target = propose_model_submitted @@ -465,7 +471,8 @@ def propose_model_submitted_release( @pytest.fixture() def propose_model_submitted_issue( - propose_downstream_model_issue, propose_model_submitted + propose_downstream_model_issue, + propose_model_submitted, ): propose_downstream = propose_downstream_model_issue propose_downstream_target = propose_model_submitted @@ -557,7 +564,7 @@ def srpm_build_model_with_new_run_and_tf_for_branch( @pytest.fixture() def srpm_build_model_with_new_run_for_branch(branch_project_event_model): srpm_model, run_model = SRPMBuildModel.create_with_new_run( - project_event_model=branch_project_event_model + project_event_model=branch_project_event_model, ) srpm_model.set_logs(SampleValues.srpm_logs) srpm_model.set_status(BuildStatus.success) @@ -576,7 +583,7 @@ def srpm_build_model_with_new_run_and_tf_for_release( @pytest.fixture() def srpm_build_model_with_new_run_for_release(release_project_event_model): srpm_model, run_model = SRPMBuildModel.create_with_new_run( - project_event_model=release_project_event_model + project_event_model=release_project_event_model, ) srpm_model.set_logs(SampleValues.srpm_logs) srpm_model.set_status(BuildStatus.success) @@ -640,7 +647,7 @@ def a_copr_build_for_pr(srpm_build_model_with_new_run_for_pr): copr_build_group=group, ) copr_build_model.set_build_logs_url( - "https://copr.somewhere/results/owner/package/target/build.logs" + "https://copr.somewhere/results/owner/package/target/build.logs", ) copr_build_model.set_built_packages(SampleValues.built_packages) yield copr_build_model @@ -662,7 +669,7 @@ def a_copr_build_for_pr_different_commit( copr_build_group=group, ) copr_build_model.set_build_logs_url( - "https://copr.somewhere/results/owner/package/target/build.logs" + "https://copr.somewhere/results/owner/package/target/build.logs", ) copr_build_model.set_built_packages(SampleValues.built_packages) yield copr_build_model @@ -682,7 +689,7 @@ def a_copr_build_for_branch_push(srpm_build_model_with_new_run_for_branch): copr_build_group=group, ) copr_build_model.set_build_logs_url( - "https://copr.somewhere/results/owner/package/target/build.logs" + "https://copr.somewhere/results/owner/package/target/build.logs", ) yield copr_build_model @@ -701,7 +708,7 @@ def a_copr_build_for_release(srpm_build_model_with_new_run_for_release): copr_build_group=group, ) copr_build_model.set_build_logs_url( - "https://copr.somewhere/results/owner/package/target/build.logs" + "https://copr.somewhere/results/owner/package/target/build.logs", ) yield copr_build_model @@ -720,7 +727,7 @@ def a_copr_build_waiting_for_srpm(srpm_build_in_copr_model): copr_build_group=group, ) copr_build_model.set_build_logs_url( - "https://copr.somewhere/results/owner/package/target/build.logs" + "https://copr.somewhere/results/owner/package/target/build.logs", ) copr_build_model.set_built_packages(SampleValues.built_packages) yield copr_build_model @@ -729,15 +736,15 @@ def a_copr_build_waiting_for_srpm(srpm_build_in_copr_model): @pytest.fixture() def multiple_copr_builds(pr_project_event_model, different_pr_project_event_model): _, run_model_for_pr = SRPMBuildModel.create_with_new_run( - project_event_model=pr_project_event_model + project_event_model=pr_project_event_model, ) group_for_pr = CoprBuildGroupModel.create(run_model_for_pr) _, run_model_for_same_pr = SRPMBuildModel.create_with_new_run( - project_event_model=pr_project_event_model + project_event_model=pr_project_event_model, ) group_for_same_pr = CoprBuildGroupModel.create(run_model_for_same_pr) _, run_model_for_a_different_pr = SRPMBuildModel.create_with_new_run( - project_event_model=different_pr_project_event_model + project_event_model=different_pr_project_event_model, ) group_for_a_different_pr = CoprBuildGroupModel.create(run_model_for_a_different_pr) @@ -790,18 +797,18 @@ def too_many_copr_builds(pr_project_event_model, different_pr_project_event_mode builds_list = [] for i in range(20): _, run_model_for_pr = SRPMBuildModel.create_with_new_run( - project_event_model=pr_project_event_model + project_event_model=pr_project_event_model, ) group_for_pr = CoprBuildGroupModel.create(run_model_for_pr) _, run_model_for_same_pr = SRPMBuildModel.create_with_new_run( - project_event_model=pr_project_event_model + project_event_model=pr_project_event_model, ) group_for_same_pr = CoprBuildGroupModel.create(run_model_for_same_pr) _, run_model_for_a_different_pr = SRPMBuildModel.create_with_new_run( - project_event_model=different_pr_project_event_model + project_event_model=different_pr_project_event_model, ) group_for_a_different_pr = CoprBuildGroupModel.create( - run_model_for_a_different_pr + run_model_for_a_different_pr, ) builds_list += [ @@ -908,7 +915,7 @@ def a_koji_build_for_pr(srpm_build_model_with_new_run_for_pr): koji_build_group=group, ) koji_build_model.set_build_logs_urls( - {"x86_64": "https://koji.somewhere/results/owner/package/target/build.logs"} + {"x86_64": "https://koji.somewhere/results/owner/package/target/build.logs"}, ) yield koji_build_model @@ -916,7 +923,7 @@ def a_koji_build_for_pr(srpm_build_model_with_new_run_for_pr): @pytest.fixture() def a_koji_build_for_pr_non_scratch(branch_project_event_model): group_for_nonscratch_build = KojiBuildGroupModel.create( - run_model=PipelineModel.create(project_event=branch_project_event_model) + run_model=PipelineModel.create(project_event=branch_project_event_model), ) koji_build_model = KojiBuildTargetModel.create( task_id=SampleValues.build_id, @@ -927,7 +934,7 @@ def a_koji_build_for_pr_non_scratch(branch_project_event_model): koji_build_group=group_for_nonscratch_build, ) koji_build_model.set_build_logs_urls( - {"x86_64": "https://koji.somewhere/results/owner/package/target/build.logs"} + {"x86_64": "https://koji.somewhere/results/owner/package/target/build.logs"}, ) yield koji_build_model @@ -965,20 +972,20 @@ def a_koji_build_for_release(srpm_build_model_with_new_run_for_release): @pytest.fixture() def multiple_koji_builds(pr_project_event_model, different_pr_project_event_model): _, run_model_for_pr = SRPMBuildModel.create_with_new_run( - project_event_model=pr_project_event_model + project_event_model=pr_project_event_model, ) group_for_pr = KojiBuildGroupModel.create(run_model_for_pr) _, run_model_for_same_pr = SRPMBuildModel.create_with_new_run( - project_event_model=pr_project_event_model + project_event_model=pr_project_event_model, ) group_for_same_pr = KojiBuildGroupModel.create(run_model_for_same_pr) _, run_model_for_a_different_pr = SRPMBuildModel.create_with_new_run( - project_event_model=different_pr_project_event_model + project_event_model=different_pr_project_event_model, ) group_for_a_different_pr = KojiBuildGroupModel.create(run_model_for_a_different_pr) group_for_nonscratch_build = KojiBuildGroupModel.create( - run_model=PipelineModel.create(project_event=different_pr_project_event_model) + run_model=PipelineModel.create(project_event=different_pr_project_event_model), ) yield [ @@ -1044,7 +1051,8 @@ def a_new_test_run_pr(srpm_build_model_with_new_run_for_pr, a_copr_build_for_pr) @pytest.fixture() def a_new_test_run_branch_push( - srpm_build_model_with_new_run_for_branch, a_copr_build_for_branch_push + srpm_build_model_with_new_run_for_branch, + a_copr_build_for_branch_push, ): _, run_model = srpm_build_model_with_new_run_for_branch group = TFTTestRunGroupModel.create([run_model]) @@ -1060,23 +1068,23 @@ def a_new_test_run_branch_push( @pytest.fixture() def multiple_new_test_runs(pr_project_event_model, different_pr_project_event_model): _, run_model_for_pr = SRPMBuildModel.create_with_new_run( - project_event_model=pr_project_event_model + project_event_model=pr_project_event_model, ) test_group_for_pr = TFTTestRunGroupModel.create([run_model_for_pr]) build_group_for_pr = CoprBuildGroupModel.create(run_model_for_pr) _, run_model_for_same_pr = SRPMBuildModel.create_with_new_run( - project_event_model=pr_project_event_model + project_event_model=pr_project_event_model, ) test_group_for_same_pr = TFTTestRunGroupModel.create([run_model_for_same_pr]) build_group_for_same_pr = CoprBuildGroupModel.create(run_model_for_same_pr) _, run_model_for_a_different_pr = SRPMBuildModel.create_with_new_run( - project_event_model=different_pr_project_event_model + project_event_model=different_pr_project_event_model, ) build_group_for_a_different_pr = CoprBuildGroupModel.create( - run_model_for_a_different_pr + run_model_for_a_different_pr, ) test_group_for_different_pr = TFTTestRunGroupModel.create( - [run_model_for_a_different_pr] + [run_model_for_a_different_pr], ) CoprBuildTargetModel.create( @@ -1148,7 +1156,8 @@ def multiple_new_test_runs(pr_project_event_model, different_pr_project_event_mo @pytest.fixture() def multiple_propose_downstream_runs_release_trigger( - release_project_event_model, different_release_project_event_model + release_project_event_model, + different_release_project_event_model, ): propose_downstream_model1, _ = SyncReleaseModel.create_with_new_run( status=SyncReleaseStatus.running, @@ -1181,7 +1190,8 @@ def multiple_propose_downstream_runs_release_trigger( @pytest.fixture() def multiple_pull_from_upstream_runs( - release_project_event_model, different_release_project_event_model + release_project_event_model, + different_release_project_event_model, ): pull_from_upstream_model1, _ = SyncReleaseModel.create_with_new_run( status=SyncReleaseStatus.running, @@ -1214,7 +1224,8 @@ def multiple_pull_from_upstream_runs( @pytest.fixture() def multiple_propose_downstream_runs_issue_trigger( - an_issue_project_event_model, different_issue_project_event_model + an_issue_project_event_model, + different_issue_project_event_model, ): propose_downstream_model1, _ = SyncReleaseModel.create_with_new_run( status=SyncReleaseStatus.running, @@ -1254,14 +1265,15 @@ def multiple_propose_downstream_runs_with_propose_downstream_targets_release_tri SyncReleaseTargetModel.create( status=SyncReleaseTargetStatus.queued, branch=SampleValues.different_branch, - ) + ), ) propose_downstream_target = SyncReleaseTargetModel.create( - status=SyncReleaseTargetStatus.running, branch=SampleValues.branch + status=SyncReleaseTargetStatus.running, + branch=SampleValues.branch, ) propose_downstream_models_release[0].sync_release_targets.append( - propose_downstream_target + propose_downstream_target, ) yield [ @@ -1281,11 +1293,12 @@ def multiple_pull_from_upstream_runs_with_targets_release_trigger( SyncReleaseTargetModel.create( status=SyncReleaseTargetStatus.queued, branch=SampleValues.different_branch, - ) + ), ) propose_downstream_target = SyncReleaseTargetModel.create( - status=SyncReleaseTargetStatus.running, branch=SampleValues.branch + status=SyncReleaseTargetStatus.running, + branch=SampleValues.branch, ) pull_from_upstream_runs[0].sync_release_targets.append(propose_downstream_target) @@ -1303,17 +1316,19 @@ def multiple_propose_downstream_runs_with_propose_downstream_targets_issue_trigg ): propose_downstream_models_issue = multiple_propose_downstream_runs_issue_trigger propose_downstream_target = SyncReleaseTargetModel.create( - status=SyncReleaseTargetStatus.retry, branch=SampleValues.branch + status=SyncReleaseTargetStatus.retry, + branch=SampleValues.branch, ) propose_downstream_models_issue[0].sync_release_targets.append( - propose_downstream_target + propose_downstream_target, ) propose_downstream_target = SyncReleaseTargetModel.create( - status=SyncReleaseTargetStatus.error, branch=SampleValues.different_branch + status=SyncReleaseTargetStatus.error, + branch=SampleValues.different_branch, ) propose_downstream_models_issue[0].sync_release_targets.append( - propose_downstream_target + propose_downstream_target, ) yield [ @@ -1328,17 +1343,21 @@ def multiple_propose_downstream_runs_with_propose_downstream_targets_issue_trigg def multiple_allowlist_entries(): yield [ AllowlistModel.add_namespace( - namespace=SampleValues.account_name, status="approved_manually" + namespace=SampleValues.account_name, + status="approved_manually", ), AllowlistModel.add_namespace( - namespace=SampleValues.different_account_name, status="approved_manually" + namespace=SampleValues.different_account_name, + status="approved_manually", ), # Not a typo, account_name repeated intentionally to check behaviour AllowlistModel.add_namespace( - namespace=SampleValues.different_account_name, status="waiting" + namespace=SampleValues.different_account_name, + status="waiting", ), AllowlistModel.add_namespace( - namespace=SampleValues.another_different_acount_name, status="waiting" + namespace=SampleValues.another_different_acount_name, + status="waiting", ), AllowlistModel.add_namespace( namespace=SampleValues.yet_another_different_acount_name, @@ -1350,7 +1369,8 @@ def multiple_allowlist_entries(): @pytest.fixture() def new_allowlist_entry(clean_before_and_after): yield AllowlistModel.add_namespace( - namespace=SampleValues.account_name, status="approved_manually" + namespace=SampleValues.account_name, + status="approved_manually", ) @@ -1401,16 +1421,24 @@ def multiple_installation_entries(installation_events): def multiple_forge_projects(): yield [ GitProjectModel.get_or_create( - "namespace", "repo", "https://github.com/namespace/repo" + "namespace", + "repo", + "https://github.com/namespace/repo", ), GitProjectModel.get_or_create( - "namespace", "different-repo", "https://github.com/namespace/different-repo" + "namespace", + "different-repo", + "https://github.com/namespace/different-repo", ), GitProjectModel.get_or_create( - "namespace", "repo", "https://gitlab.com/namespace/repo" + "namespace", + "repo", + "https://gitlab.com/namespace/repo", ), GitProjectModel.get_or_create( - "namespace", "repo", "https://git.stg.centos.org/namespace/repo" + "namespace", + "repo", + "https://git.stg.centos.org/namespace/repo", ), ] @@ -1546,7 +1574,7 @@ def push_branch_event_dict(): "added": [], "removed": [], "modified": [".packit.yaml"], - } + }, ], "head_commit": { "id": "04885ff850b0fa0e206cd09db73565703d48f99b", @@ -1732,7 +1760,7 @@ def push_gitlab_event_dict(): "added": [], "modified": ["README.md"], "removed": [], - } + }, ], "total_commits_count": 1, "push_options": {}, @@ -2206,7 +2234,7 @@ def koji_build_scratch_end_dict(): @pytest.fixture() def few_runs(pr_project_event_model, different_pr_project_event_model): _, run_model_for_pr = SRPMBuildModel.create_with_new_run( - project_event_model=pr_project_event_model + project_event_model=pr_project_event_model, ) build_group = CoprBuildGroupModel.create(run_model_for_pr) TFTTestRunGroupModel.create([run_model_for_pr]) @@ -2231,7 +2259,7 @@ def few_runs(pr_project_event_model, different_pr_project_event_model): ) _, run_model_for_different_pr = SRPMBuildModel.create_with_new_run( - project_event_model=different_pr_project_event_model + project_event_model=different_pr_project_event_model, ) TFTTestRunGroupModel.create([run_model_for_different_pr]) build_group = CoprBuildGroupModel.create(run_model_for_different_pr) @@ -2272,11 +2300,11 @@ def few_runs(pr_project_event_model, different_pr_project_event_model): @pytest.fixture() def runs_without_build(pr_project_event_model, branch_project_event_model): run_model_for_pr_only_test = PipelineModel.create( - project_event=pr_project_event_model + project_event=pr_project_event_model, ) TFTTestRunGroupModel.create([run_model_for_pr_only_test]) run_model_for_branch_only_test = PipelineModel.create( - project_event=branch_project_event_model + project_event=branch_project_event_model, ) TFTTestRunGroupModel.create([run_model_for_branch_only_test]) @@ -2286,7 +2314,7 @@ def runs_without_build(pr_project_event_model, branch_project_event_model): target=SampleValues.target, status=TestingFarmResult.new, test_run_group=run_model_for_pr_only_test.test_run_group, - ), + ) TFTTestRunTargetModel.create( pipeline_id=SampleValues.pipeline_id, web_url=SampleValues.testing_farm_url, @@ -2400,7 +2428,7 @@ def source_git_dist_git_pr_new_relationship(): @pytest.fixture() def bodhi_update_model(branch_project_event_model): group = BodhiUpdateGroupModel.create( - run_model=PipelineModel.create(project_event=branch_project_event_model) + run_model=PipelineModel.create(project_event=branch_project_event_model), ) model = BodhiUpdateTargetModel.create( target=SampleValues.dist_git_branch, @@ -2417,7 +2445,7 @@ def bodhi_update_model(branch_project_event_model): @pytest.fixture() def multiple_bodhi_update_runs(branch_project_event_model): group = BodhiUpdateGroupModel.create( - run_model=PipelineModel.create(project_event=branch_project_event_model) + run_model=PipelineModel.create(project_event=branch_project_event_model), ) yield [ BodhiUpdateTargetModel.create( diff --git a/tests_openshift/database/test_allowlist.py b/tests_openshift/database/test_allowlist.py index ec6f03773..4e95c7797 100644 --- a/tests_openshift/database/test_allowlist.py +++ b/tests_openshift/database/test_allowlist.py @@ -13,16 +13,19 @@ def multiple_allowlist_entries(): session.query(AllowlistModel).delete() yield [ AllowlistModel.add_namespace( - namespace="Rayquaza", status="approved_manually" + namespace="Rayquaza", + status="approved_manually", ), AllowlistModel.add_namespace( - namespace="Deoxys", status="approved_manually" + namespace="Deoxys", + status="approved_manually", ), # Not a typo, account_name repeated intentionally to check behaviour AllowlistModel.add_namespace(namespace="Deoxys", status="waiting"), AllowlistModel.add_namespace(namespace="Solgaleo", status="waiting"), AllowlistModel.add_namespace( - namespace="Zacian", status="approved_manually" + namespace="Zacian", + status="approved_manually", ), ] @@ -33,7 +36,8 @@ def new_allowlist_entry(): with sa_session_transaction() as session: session.query(AllowlistModel).delete() yield AllowlistModel.add_namespace( - namespace="Rayquaza", status="approved_manually" + namespace="Rayquaza", + status="approved_manually", ) diff --git a/tests_openshift/database/test_events.py b/tests_openshift/database/test_events.py index 4e1ba71bf..9e01cafe8 100644 --- a/tests_openshift/database/test_events.py +++ b/tests_openshift/database/test_events.py @@ -37,10 +37,12 @@ def test_release_event_existing_release( - clean_before_and_after, release_model, release_event_dict + clean_before_and_after, + release_model, + release_event_dict, ): flexmock(GithubProject).should_receive("get_sha_from_tag").and_return( - SampleValues.commit_sha + SampleValues.commit_sha, ) event_object = Parser.parse_event(release_event_dict) @@ -63,7 +65,7 @@ def test_release_event_existing_release( def test_release_event_non_existing_release(clean_before_and_after, release_event_dict): flexmock(GithubProject).should_receive("get_sha_from_tag").and_return( - SampleValues.commit_sha + SampleValues.commit_sha, ) event_object = Parser.parse_event(release_event_dict) @@ -84,7 +86,9 @@ def test_release_event_non_existing_release(clean_before_and_after, release_even def test_push_branch_event_existing_branch( - clean_before_and_after, branch_model, push_branch_event_dict + clean_before_and_after, + branch_model, + push_branch_event_dict, ): event_object = Parser.parse_event(push_branch_event_dict) assert isinstance(event_object, PushGitHubEvent) @@ -103,7 +107,8 @@ def test_push_branch_event_existing_branch( def test_push_branch_event_non_existing_branch( - clean_before_and_after, push_branch_event_dict + clean_before_and_after, + push_branch_event_dict, ): event_object = Parser.parse_event(push_branch_event_dict) assert isinstance(event_object, PushGitHubEvent) @@ -174,7 +179,9 @@ def test_merge_request_comment_event(clean_before_and_after, mr_comment_event_di def test_push_gitlab_event( - clean_before_and_after, branch_model_gitlab, push_gitlab_event_dict + clean_before_and_after, + branch_model_gitlab, + push_gitlab_event_dict, ): event_object = Parser.parse_event(push_gitlab_event_dict) assert isinstance(event_object, PushGitlabEvent) @@ -210,7 +217,9 @@ def test_pr_event_non_existing_pr(clean_before_and_after, pr_event_dict): def test_pr_comment_event_existing_pr( - clean_before_and_after, pr_model, pr_comment_event_dict_packit_build + clean_before_and_after, + pr_model, + pr_comment_event_dict_packit_build, ): event_object = Parser.parse_event(pr_comment_event_dict_packit_build) assert isinstance(event_object, PullRequestCommentGithubEvent) @@ -221,7 +230,7 @@ def test_pr_comment_event_existing_pr( assert event_object.project_url == "https://github.com/the-namespace/the-repo-name" flexmock(GithubProject).should_receive("get_pr").with_args(342).and_return( - flexmock(head_commit="12345") + flexmock(head_commit="12345"), ) assert event_object.commit_sha == "12345" @@ -235,7 +244,8 @@ def test_pr_comment_event_existing_pr( def test_pr_comment_event_non_existing_pr( - clean_before_and_after, pr_comment_event_dict_packit_build + clean_before_and_after, + pr_comment_event_dict_packit_build, ): event_object = Parser.parse_event(pr_comment_event_dict_packit_build) assert isinstance(event_object, PullRequestCommentGithubEvent) @@ -245,7 +255,7 @@ def test_pr_comment_event_non_existing_pr( assert event_object.pr_id == 342 flexmock(GithubProject).should_receive("get_pr").with_args(342).and_return( - flexmock(head_commit="12345") + flexmock(head_commit="12345"), ) assert event_object.commit_sha == "12345" @@ -258,10 +268,14 @@ def test_pr_comment_event_non_existing_pr( def test_testing_farm_response_existing_pr( - clean_before_and_after, pr_model, a_new_test_run_pr, tf_notification, tf_result + clean_before_and_after, + pr_model, + a_new_test_run_pr, + tf_notification, + tf_result, ): flexmock(TestingFarmJobHelper).should_receive("get_request_details").with_args( - SampleValues.pipeline_id + SampleValues.pipeline_id, ).and_return(tf_result) event_object = Parser.parse_event(tf_notification) assert isinstance(event_object, TestingFarmResultsEvent) @@ -278,10 +292,12 @@ def test_testing_farm_response_existing_pr( def test_testing_farm_response_non_existing_pr( - clean_before_and_after, tf_notification, tf_result + clean_before_and_after, + tf_notification, + tf_result, ): flexmock(TestingFarmJobHelper).should_receive("get_request_details").with_args( - SampleValues.pipeline_id + SampleValues.pipeline_id, ).and_return(tf_result) event_object = Parser.parse_event(tf_notification) assert isinstance(event_object, TestingFarmResultsEvent) @@ -299,7 +315,7 @@ def test_testing_farm_response_existing_branch_push( tf_result, ): flexmock(TestingFarmJobHelper).should_receive("get_request_details").with_args( - SampleValues.pipeline_id + SampleValues.pipeline_id, ).and_return(tf_result) branch_model = branch_project_event_model.get_project_event_object() event_object = Parser.parse_event(tf_notification) @@ -317,10 +333,12 @@ def test_testing_farm_response_existing_branch_push( def test_testing_farm_response_non_existing_branch_push( - clean_before_and_after, tf_notification, tf_result + clean_before_and_after, + tf_notification, + tf_result, ): flexmock(TestingFarmJobHelper).should_receive("get_request_details").with_args( - SampleValues.pipeline_id + SampleValues.pipeline_id, ).and_return(tf_result) event_object = Parser.parse_event(tf_notification) @@ -333,7 +351,10 @@ def test_testing_farm_response_non_existing_branch_push( def test_koji_build_scratch_start( - clean_before_and_after, pr_model, a_koji_build_for_pr, koji_build_scratch_start_dict + clean_before_and_after, + pr_model, + a_koji_build_for_pr, + koji_build_scratch_start_dict, ): event_object = Parser.parse_event(koji_build_scratch_start_dict) assert isinstance(event_object, KojiTaskEvent) @@ -351,7 +372,10 @@ def test_koji_build_scratch_start( def test_koji_build_scratch_end( - clean_before_and_after, pr_model, a_koji_build_for_pr, koji_build_scratch_end_dict + clean_before_and_after, + pr_model, + a_koji_build_for_pr, + koji_build_scratch_end_dict, ): event_object = Parser.parse_event(koji_build_scratch_end_dict) assert isinstance(event_object, KojiTaskEvent) @@ -375,7 +399,7 @@ def test_parse_check_rerun_commit( check_rerun_event_dict_commit, ): check_rerun_event_dict_commit["check_run"]["external_id"] = str( - branch_project_event_model.id + branch_project_event_model.id, ) event_object = Parser.parse_event(check_rerun_event_dict_commit) @@ -402,7 +426,7 @@ def test_parse_check_rerun_pull_request( check_rerun_event_dict_commit, ): check_rerun_event_dict_commit["check_run"]["external_id"] = str( - pr_project_event_model.id + pr_project_event_model.id, ) event_object = Parser.parse_event(check_rerun_event_dict_commit) @@ -430,7 +454,7 @@ def test_parse_check_rerun_release( check_rerun_event_dict_commit, ): check_rerun_event_dict_commit["check_run"]["external_id"] = str( - release_project_event_model.id + release_project_event_model.id, ) event_object = Parser.parse_event(check_rerun_event_dict_commit) @@ -453,13 +477,14 @@ def test_parse_check_rerun_release( def test_filter_failed_models_targets_copr( - clean_before_and_after, multiple_copr_builds + clean_before_and_after, + multiple_copr_builds, ): builds_list = list( CoprBuildTargetModel.get_all_by( project_name=SampleValues.project, commit_sha=SampleValues.ref, - ) + ), ) assert len(builds_list) == 3 @@ -482,12 +507,13 @@ def test_filter_failed_models_targets_copr( def test_filter_failed_models_targets_tf( - clean_before_and_after, multiple_new_test_runs + clean_before_and_after, + multiple_new_test_runs, ): test_list = list( TFTTestRunTargetModel.get_all_by_commit_target( - commit_sha=SampleValues.commit_sha - ) + commit_sha=SampleValues.commit_sha, + ), ) assert len(test_list) == 3 diff --git a/tests_openshift/database/test_models.py b/tests_openshift/database/test_models.py index 8c9c70f47..a3dde9f41 100644 --- a/tests_openshift/database/test_models.py +++ b/tests_openshift/database/test_models.py @@ -65,7 +65,8 @@ def test_create_pr_project_event_model(clean_before_and_after, pr_project_event_ def test_create_release_project_event_model( - clean_before_and_after, release_project_event_model + clean_before_and_after, + release_project_event_model, ): assert release_project_event_model.type == ProjectEventModelType.release release_model = release_project_event_model.get_project_event_object() @@ -74,7 +75,8 @@ def test_create_release_project_event_model( def test_create_branch_trigger_model( - clean_before_and_after, branch_project_event_model + clean_before_and_after, + branch_project_event_model, ): assert branch_project_event_model.type == ProjectEventModelType.branch_push branch = branch_project_event_model.get_project_event_object() @@ -100,7 +102,8 @@ def test_create_copr_build(clean_before_and_after, a_copr_build_for_pr): def test_copr_build_get_pr_id( - clean_before_and_after, copr_builds_with_different_triggers + clean_before_and_after, + copr_builds_with_different_triggers, ): assert copr_builds_with_different_triggers[0].get_pr_id() == 342 assert not copr_builds_with_different_triggers[1].get_pr_id() @@ -108,7 +111,8 @@ def test_copr_build_get_pr_id( def test_copr_build_get_branch( - clean_before_and_after, copr_builds_with_different_triggers + clean_before_and_after, + copr_builds_with_different_triggers, ): assert not copr_builds_with_different_triggers[0].get_branch_name() assert copr_builds_with_different_triggers[1].get_branch_name() == "build-branch" @@ -139,12 +143,14 @@ def test_get_copr_build(clean_before_and_after, a_copr_build_for_pr): # pass in a build_id and a target b = CoprBuildTargetModel.get_by_build_id( - a_copr_build_for_pr.build_id, SampleValues.target + a_copr_build_for_pr.build_id, + SampleValues.target, ) assert b.id == a_copr_build_for_pr.id # let's make sure passing int works as well b2 = CoprBuildTargetModel.get_by_build_id( - int(a_copr_build_for_pr.build_id), SampleValues.target + int(a_copr_build_for_pr.build_id), + SampleValues.target, ) assert b2.id == a_copr_build_for_pr.id @@ -161,7 +167,8 @@ def test_copr_build_set_status(clean_before_and_after, a_copr_build_for_pr): a_copr_build_for_pr.set_status(BuildStatus.success) assert a_copr_build_for_pr.status == BuildStatus.success b = CoprBuildTargetModel.get_by_build_id( - a_copr_build_for_pr.build_id, SampleValues.target + a_copr_build_for_pr.build_id, + SampleValues.target, ) assert b.status == BuildStatus.success @@ -171,7 +178,8 @@ def test_copr_build_set_build_logs_url(clean_before_and_after, a_copr_build_for_ a_copr_build_for_pr.set_build_logs_url(url) assert a_copr_build_for_pr.build_logs_url == url b = CoprBuildTargetModel.get_by_build_id( - a_copr_build_for_pr.build_id, SampleValues.target + a_copr_build_for_pr.build_id, + SampleValues.target, ) assert b.build_logs_url == url @@ -192,12 +200,14 @@ def test_create_koji_build(clean_before_and_after, a_koji_build_for_pr): def test_get_koji_build(clean_before_and_after, a_koji_build_for_pr): assert a_koji_build_for_pr.id b = KojiBuildTargetModel.get_by_task_id( - a_koji_build_for_pr.task_id, SampleValues.target + a_koji_build_for_pr.task_id, + SampleValues.target, ) assert b.id == a_koji_build_for_pr.id # let's make sure passing int works as well b = KojiBuildTargetModel.get_by_task_id( - int(a_koji_build_for_pr.task_id), SampleValues.target + int(a_koji_build_for_pr.task_id), + SampleValues.target, ) assert b.id == a_koji_build_for_pr.id b2 = KojiBuildTargetModel.get_by_id(b.id) @@ -209,7 +219,8 @@ def test_koji_build_set_status(clean_before_and_after, a_koji_build_for_pr): a_koji_build_for_pr.set_status("awesome") assert a_koji_build_for_pr.status == "awesome" b = KojiBuildTargetModel.get_by_task_id( - a_koji_build_for_pr.task_id, SampleValues.target + a_koji_build_for_pr.task_id, + SampleValues.target, ) assert b.status == "awesome" @@ -217,12 +228,13 @@ def test_koji_build_set_status(clean_before_and_after, a_koji_build_for_pr): def test_koji_build_set_build_logs_urls(clean_before_and_after, a_koji_build_for_pr): urls = { "x86_64": "https://kojipkgs.fedoraproject.org//" - "packages/python-ogr/0.11.0/1.fc30/data/logs/noarch/build.log" + "packages/python-ogr/0.11.0/1.fc30/data/logs/noarch/build.log", } a_koji_build_for_pr.set_build_logs_urls(urls) assert a_koji_build_for_pr.build_logs_urls == urls b = KojiBuildTargetModel.get_by_task_id( - a_koji_build_for_pr.task_id, SampleValues.target + a_koji_build_for_pr.task_id, + SampleValues.target, ) assert b.build_logs_urls == urls @@ -284,7 +296,8 @@ def test_errors_while_doing_db(clean_before_and_after): def test_get_srpm_builds_in_give_range( - clean_before_and_after, srpm_build_model_with_new_run_for_pr + clean_before_and_after, + srpm_build_model_with_new_run_for_pr, ): builds_list = list(SRPMBuildModel.get_range(0, 10)) assert len(builds_list) == 1 @@ -312,25 +325,29 @@ def test_get_all_build_id(clean_before_and_after, multiple_copr_builds): def test_get_by_build_id(clean_before_and_after, multiple_copr_builds): # these are not iterable and thus should be accessible directly build_a = CoprBuildTargetModel.get_by_build_id( - SampleValues.build_id, SampleValues.target + SampleValues.build_id, + SampleValues.target, ) assert build_a.project_name == "the-project-name" assert build_a.target == "fedora-42-x86_64" build_b = CoprBuildTargetModel.get_by_build_id( - SampleValues.build_id, SampleValues.different_target + SampleValues.build_id, + SampleValues.different_target, ) assert build_b.project_name == "the-project-name" assert build_b.target == "fedora-43-x86_64" build_c = CoprBuildTargetModel.get_by_build_id( - SampleValues.another_different_build_id, SampleValues.target + SampleValues.another_different_build_id, + SampleValues.target, ) assert build_c.project_name == "different-project-name" def test_copr_get_all_by_owner_project_commit_target( - clean_before_and_after, multiple_copr_builds + clean_before_and_after, + multiple_copr_builds, ): builds_list = list( CoprBuildTargetModel.get_all_by( @@ -338,7 +355,7 @@ def test_copr_get_all_by_owner_project_commit_target( project_name=SampleValues.project, target=SampleValues.target, commit_sha=SampleValues.ref, - ) + ), ) assert len(builds_list) == 2 # both should have the same project_name @@ -353,7 +370,7 @@ def test_copr_get_all_by_owner_project_commit_target( CoprBuildTargetModel.get_all_by( project_name=SampleValues.project, commit_sha=SampleValues.ref, - ) + ), ) assert len(builds_list_without_target) == 3 assert ( @@ -366,7 +383,7 @@ def test_copr_get_all_by_owner_project_commit_target( def test_copr_get_all_by_commit(clean_before_and_after, multiple_copr_builds): builds_list = list( - CoprBuildTargetModel.get_all_by_commit(commit_sha=SampleValues.ref) + CoprBuildTargetModel.get_all_by_commit(commit_sha=SampleValues.ref), ) assert len(builds_list) == 3 # they should have the same project_name @@ -420,18 +437,20 @@ def test_copr_and_koji_build_for_one_trigger(clean_before_and_after): project_url="https://github.com/the-namespace/the-repo-name", ) project_event = ProjectEventModel.get_or_create( - type=ProjectEventModelType.pull_request, event_id=pr1.id, commit_sha="abcdef" + type=ProjectEventModelType.pull_request, + event_id=pr1.id, + commit_sha="abcdef", ) # SRPMBuildModel is (sadly) not shared between Koji and Copr builds. srpm_build_for_copr, run_model_for_copr = SRPMBuildModel.create_with_new_run( - project_event_model=project_event + project_event_model=project_event, ) copr_group = CoprBuildGroupModel.create(run_model_for_copr) srpm_build_for_copr.set_logs("asd\nqwe\n") srpm_build_for_copr.set_status(BuildStatus.success) srpm_build_for_koji, run_model_for_koji = SRPMBuildModel.create_with_new_run( - project_event_model=project_event + project_event_model=project_event, ) koji_group = KojiBuildGroupModel.create(run_model_for_koji) srpm_build_for_copr.set_logs("asd\nqwe\n") @@ -521,7 +540,9 @@ def test_tmt_test_run_get_project(clean_before_and_after, a_new_test_run_pr): def test_tmt_test_run_get_copr_build( - clean_before_and_after, a_copr_build_for_pr, a_new_test_run_pr + clean_before_and_after, + a_copr_build_for_pr, + a_new_test_run_pr, ): assert len(a_new_test_run_pr.group_of_targets.runs) == 1 assert ( @@ -536,7 +557,8 @@ def test_tmt_test_run_get_pr_id(clean_before_and_after, a_new_test_run_pr): def test_tmt_test_run_set_web_url( - clean_before_and_after, srpm_build_model_with_new_run_for_pr + clean_before_and_after, + srpm_build_model_with_new_run_for_pr, ): _, run_model = srpm_build_model_with_new_run_for_pr group = TFTTestRunGroupModel.create(run_models=[run_model]) @@ -555,14 +577,16 @@ def test_tmt_test_run_set_web_url( assert test_run_model.web_url == new_url test_run_for_pipeline_id = TFTTestRunTargetModel.get_by_pipeline_id( - test_run_model.pipeline_id + test_run_model.pipeline_id, ) assert test_run_for_pipeline_id assert test_run_for_pipeline_id.web_url == new_url def test_tmt_test_get_by_pipeline_id_pr( - clean_before_and_after, pr_model, srpm_build_model_with_new_run_for_pr + clean_before_and_after, + pr_model, + srpm_build_model_with_new_run_for_pr, ): _, run_model = srpm_build_model_with_new_run_for_pr group = TFTTestRunGroupModel.create(run_models=[run_model]) @@ -574,7 +598,7 @@ def test_tmt_test_get_by_pipeline_id_pr( ) test_run_for_pipeline_id = TFTTestRunTargetModel.get_by_pipeline_id( - test_run_model.pipeline_id + test_run_model.pipeline_id, ) assert test_run_for_pipeline_id assert test_run_for_pipeline_id.get_project_event_object() == pr_model @@ -664,7 +688,9 @@ def test_get_projects(clean_before_and_after, a_copr_build_for_pr): def test_get_project(clean_before_and_after, a_copr_build_for_pr): project = GitProjectModel.get_project( - "github.com", "the-namespace", "the-repo-name" + "github.com", + "the-namespace", + "the-repo-name", ) assert project.namespace == "the-namespace" assert project.repo_name == "the-repo-name" @@ -685,7 +711,7 @@ def test_get_by_forge(clean_before_and_after, multiple_forge_projects): def test_get_by_forge_namespace(clean_before_and_after, multiple_copr_builds): projects = list( - GitProjectModel.get_by_forge_namespace(0, 10, "github.com", "the-namespace") + GitProjectModel.get_by_forge_namespace(0, 10, "github.com", "the-namespace"), ) assert projects[0].namespace == "the-namespace" assert projects[0].repo_name == "the-repo-name" @@ -694,22 +720,34 @@ def test_get_by_forge_namespace(clean_before_and_after, multiple_copr_builds): def test_get_project_prs(clean_before_and_after, a_copr_build_for_pr): prs_a = list( GitProjectModel.get_project_prs( - 0, 10, "github.com", "the-namespace", "the-repo-name" - ) + 0, + 10, + "github.com", + "the-namespace", + "the-repo-name", + ), ) assert prs_a assert len(prs_a) == 1 assert prs_a[0].id is not None # cant explicitly check because its random like prs_b = list( GitProjectModel.get_project_prs( - 0, 10, "gitlab.com", "the-namespace", "the-repo-name" - ) + 0, + 10, + "gitlab.com", + "the-namespace", + "the-repo-name", + ), ) assert prs_b == [] prs_c = list( GitProjectModel.get_project_prs( - 0, 10, "github", "the-namespace", "the-repo-name" - ) + 0, + 10, + "github", + "the-namespace", + "the-repo-name", + ), ) assert prs_c == [] @@ -717,8 +755,12 @@ def test_get_project_prs(clean_before_and_after, a_copr_build_for_pr): def test_get_project_branch(clean_before_and_after, a_copr_build_for_branch_push): branches_list = list( GitProjectModel.get_project_branches( - 0, 10, "github.com", "the-namespace", "the-repo-name" - ) + 0, + 10, + "github.com", + "the-namespace", + "the-repo-name", + ), ) assert len(branches_list) == 1 assert branches_list[0].name == "build-branch" @@ -727,8 +769,12 @@ def test_get_project_branch(clean_before_and_after, a_copr_build_for_branch_push def test_get_project_issues(clean_before_and_after, an_issue_model): issues_list = list( GitProjectModel.get_project_issues( - 0, 10, "github.com", "the-namespace", "the-repo-name" - ) + 0, + 10, + "github.com", + "the-namespace", + "the-repo-name", + ), ) assert len(issues_list) == 1 assert issues_list[0].issue_id == 2020 @@ -737,8 +783,12 @@ def test_get_project_issues(clean_before_and_after, an_issue_model): def test_get_project_releases(clean_before_and_after, release_model): releases = list( GitProjectModel.get_project_releases( - 0, 10, "github.com", "the-namespace", "the-repo-name" - ) + 0, + 10, + "github.com", + "the-namespace", + "the-repo-name", + ), ) assert releases[0].tag_name == "v1.0.2" assert releases[0].commit_hash == "80201a74d96c" @@ -758,7 +808,8 @@ def test_get_installations(clean_before_and_after, multiple_installation_entries def test_get_installation_by_account( - clean_before_and_after, multiple_installation_entries + clean_before_and_after, + multiple_installation_entries, ): assert GithubInstallationModel.get_by_account_login("teg").sender_login == "teg" assert GithubInstallationModel.get_by_account_login("Pac23").sender_login == "Pac23" @@ -778,7 +829,9 @@ def test_pr_get_copr_builds( def test_pr_multiple_commits_copr_builds( - clean_before_and_after, a_copr_build_for_pr, a_copr_build_for_pr_different_commit + clean_before_and_after, + a_copr_build_for_pr, + a_copr_build_for_pr_different_commit, ): pr_model = a_copr_build_for_pr_different_commit.get_project_event_object() copr_builds = pr_model.get_copr_builds() @@ -788,7 +841,9 @@ def test_pr_multiple_commits_copr_builds( def test_pr_get_koji_builds( - clean_before_and_after, a_koji_build_for_pr, different_pr_model + clean_before_and_after, + a_koji_build_for_pr, + different_pr_model, ): pr_model = a_koji_build_for_pr.get_project_event_object() assert a_koji_build_for_pr in pr_model.get_koji_builds() @@ -796,7 +851,9 @@ def test_pr_get_koji_builds( def test_pr_get_srpm_builds( - clean_before_and_after, srpm_build_model_with_new_run_for_pr, a_copr_build_for_pr + clean_before_and_after, + srpm_build_model_with_new_run_for_pr, + a_copr_build_for_pr, ): srpm_build_model, _ = srpm_build_model_with_new_run_for_pr pr_model = a_copr_build_for_pr.get_project_event_object() @@ -831,7 +888,7 @@ def test_merged_runs(clean_before_and_after, few_runs): assert len(merged_run.copr_build_group_id) == 1 assert len(merged_run.copr_build_group_id[0]) == 1 build_group = CoprBuildGroupModel.get_by_id( - merged_run.copr_build_group_id[0][0] + merged_run.copr_build_group_id[0][0], ) for copr_build in build_group.grouped_targets: @@ -841,7 +898,8 @@ def test_merged_runs(clean_before_and_after, few_runs): def test_merged_chroots_on_tests_without_build( - clean_before_and_after, runs_without_build + clean_before_and_after, + runs_without_build, ): result = list(PipelineModel.get_merged_chroots(0, 10)) assert len(result) == 2 @@ -852,8 +910,9 @@ def test_merged_chroots_on_tests_without_build( def test_tf_get_all_by_commit_target(clean_before_and_after, multiple_new_test_runs): test_list = list( TFTTestRunTargetModel.get_all_by_commit_target( - commit_sha=SampleValues.commit_sha, target=SampleValues.target - ) + commit_sha=SampleValues.commit_sha, + target=SampleValues.target, + ), ) assert len(test_list) == 1 assert test_list[0].commit_sha == SampleValues.commit_sha @@ -862,7 +921,7 @@ def test_tf_get_all_by_commit_target(clean_before_and_after, multiple_new_test_r test_list = list( TFTTestRunTargetModel.get_all_by_commit_target( commit_sha=SampleValues.commit_sha, - ) + ), ) assert len(test_list) == 3 assert ( @@ -905,7 +964,8 @@ def test_propose_model_get_by_id(clean_before_and_after, propose_model): def test_create_propose_downstream_model( - clean_before_and_after, propose_downstream_model_release + clean_before_and_after, + propose_downstream_model_release, ): assert propose_downstream_model_release.status == SyncReleaseStatus.running # test if submitted time is something - datetime @@ -913,14 +973,16 @@ def test_create_propose_downstream_model( def test_set_propose_downstream_model_status( - clean_before_and_after, propose_downstream_model_release + clean_before_and_after, + propose_downstream_model_release, ): propose_downstream_model_release.set_status(SyncReleaseStatus.finished) assert propose_downstream_model_release.status == SyncReleaseStatus.finished def test_get_propose_downstream_model_by_id( - clean_before_and_after, propose_downstream_model_release + clean_before_and_after, + propose_downstream_model_release, ): assert propose_downstream_model_release.id @@ -929,12 +991,13 @@ def test_get_propose_downstream_model_by_id( def test_get_propose_downstream_model_by_status( - clean_before_and_after, multiple_propose_downstream_runs_release_trigger + clean_before_and_after, + multiple_propose_downstream_runs_release_trigger, ): assert multiple_propose_downstream_runs_release_trigger propose_downstream_list = list( - SyncReleaseModel.get_all_by_status(status=SyncReleaseStatus.running) + SyncReleaseModel.get_all_by_status(status=SyncReleaseStatus.running), ) assert len(propose_downstream_list) == 2 assert ( @@ -945,14 +1008,17 @@ def test_get_propose_downstream_model_by_status( def test_get_propose_downstream_model_range( - clean_before_and_after, multiple_propose_downstream_runs_release_trigger + clean_before_and_after, + multiple_propose_downstream_runs_release_trigger, ): assert multiple_propose_downstream_runs_release_trigger propose_downstream_list = list( SyncReleaseModel.get_range( - first=0, last=10, job_type=SyncReleaseJobType.propose_downstream - ) + first=0, + last=10, + job_type=SyncReleaseJobType.propose_downstream, + ), ) assert len(propose_downstream_list) == 4 @@ -1007,29 +1073,32 @@ def test_sourcegit_distgit_pr_relationship(clean_before_and_after): def test_get_source_git_dist_git_pr_relationship( - clean_before_and_after, source_git_dist_git_pr_new_relationship + clean_before_and_after, + source_git_dist_git_pr_new_relationship, ): assert source_git_dist_git_pr_new_relationship.id assert SourceGitPRDistGitPRModel.get_by_id( - source_git_dist_git_pr_new_relationship.id + source_git_dist_git_pr_new_relationship.id, ) def test_get_by_source_git_id( - clean_before_and_after, source_git_dist_git_pr_new_relationship + clean_before_and_after, + source_git_dist_git_pr_new_relationship, ): assert source_git_dist_git_pr_new_relationship.source_git_pull_request_id assert SourceGitPRDistGitPRModel.get_by_source_git_id( - source_git_dist_git_pr_new_relationship.source_git_pull_request_id + source_git_dist_git_pr_new_relationship.source_git_pull_request_id, ) def test_get_by_dist_git_id( - clean_before_and_after, source_git_dist_git_pr_new_relationship + clean_before_and_after, + source_git_dist_git_pr_new_relationship, ): assert source_git_dist_git_pr_new_relationship.dist_git_pull_request_id assert SourceGitPRDistGitPRModel.get_by_dist_git_id( - source_git_dist_git_pr_new_relationship.dist_git_pull_request_id + source_git_dist_git_pr_new_relationship.dist_git_pull_request_id, ) @@ -1040,7 +1109,8 @@ def test_get_all_downstream_projects(clean_before_and_after, propose_model_submi def test_project_event_get_older_than_with_packages_config( - clean_before_and_after, branch_project_event_model + clean_before_and_after, + branch_project_event_model, ): branch_project_event_model.set_packages_config({"key": "value"}) run1 = PipelineModel.create(project_event=branch_project_event_model) @@ -1049,8 +1119,10 @@ def test_project_event_get_older_than_with_packages_config( assert ( len( list( - ProjectEventModel.get_older_than_with_packages_config(timedelta(days=1)) - ) + ProjectEventModel.get_older_than_with_packages_config( + timedelta(days=1), + ), + ), ) == 1 ) @@ -1061,8 +1133,10 @@ def test_project_event_get_older_than_with_packages_config( assert ( len( list( - ProjectEventModel.get_older_than_with_packages_config(timedelta(days=1)) - ) + ProjectEventModel.get_older_than_with_packages_config( + timedelta(days=1), + ), + ), ) == 0 ) diff --git a/tests_openshift/database/test_tasks.py b/tests_openshift/database/test_tasks.py index 52c56fea8..29fe24529 100644 --- a/tests_openshift/database/test_tasks.py +++ b/tests_openshift/database/test_tasks.py @@ -65,7 +65,7 @@ def packit_build_752(): ) srpm_build, run_model = SRPMBuildModel.create_with_new_run( - project_event_model=pr_event + project_event_model=pr_event, ) group = CoprBuildGroupModel.create(run_model) srpm_build.set_logs("asd\nqwe\n") @@ -90,8 +90,8 @@ def test_check_copr_build(clean_before_and_after, packit_build_752): config={ "username": "packit", "copr_url": "https://copr.fedorainfracloud.org/", - } - ) + }, + ), ) flexmock(AbstractCoprBuildEvent).should_receive("get_packages_config").and_return( PackageConfig( @@ -107,12 +107,12 @@ def test_check_copr_build(clean_before_and_after, packit_build_752): "fedora-rawhide-x86_64", "fedora-31-x86_64", "fedora-32-x86_64", - ] - ) + ], + ), }, - ) + ), ], - ) + ), ) coprs_response = Munch( { @@ -144,7 +144,7 @@ def test_check_copr_build(clean_before_and_after, packit_build_752): "state": "succeeded", "submitted_on": 1583916261, "submitter": "packit", - } + }, ) flexmock(BuildProxy).should_receive("get").and_return(coprs_response) @@ -173,10 +173,11 @@ def test_check_copr_build(clean_before_and_after, packit_build_752): "version": "0.38.0", }, ], - } + }, ) flexmock(BuildChrootProxy).should_receive("get_built_packages").with_args( - BUILD_ID, "fedora-rawhide-x86_64" + BUILD_ID, + "fedora-rawhide-x86_64", ).and_return(copr_response_built_packages) chroot_response = Munch( @@ -188,10 +189,11 @@ def test_check_copr_build(clean_before_and_after, packit_build_752): "01300329-packit/", "started_on": 1583916315, "state": "succeeded", - } + }, ) flexmock(BuildChrootProxy).should_receive("get").with_args( - BUILD_ID, "fedora-rawhide-x86_64" + BUILD_ID, + "fedora-rawhide-x86_64", ).and_return(chroot_response) pr = flexmock(source_project=flexmock(), target_branch="main") @@ -202,7 +204,7 @@ def test_check_copr_build(clean_before_and_after, packit_build_752): flexmock(GithubProject).should_receive("get_pr").and_return(pr) flexmock(GithubProject).should_receive("create_check_run").and_return().once() flexmock(GithubProject).should_receive("get_git_urls").and_return( - {"git": "https://github.com/packit-service/packit.git"} + {"git": "https://github.com/packit-service/packit.git"}, ) flexmock(CoprHelper).should_receive("get_valid_build_targets").and_return( { @@ -210,7 +212,7 @@ def test_check_copr_build(clean_before_and_after, packit_build_752): "fedora-32-x86_64", "fedora-31-x86_64", "fedora-rawhide-x86_64", - } + }, ) flexmock(Pushgateway).should_receive("push").once().and_return() diff --git a/tests_openshift/openshift_integration/test_copr.py b/tests_openshift/openshift_integration/test_copr.py index 782f4fb38..479a565db 100644 --- a/tests_openshift/openshift_integration/test_copr.py +++ b/tests_openshift/openshift_integration/test_copr.py @@ -9,13 +9,13 @@ def pr_event(): return json.loads( - (DATA_DIR / "webhooks" / "copr_build" / "pr_synchronize.json").read_text() + (DATA_DIR / "webhooks" / "copr_build" / "pr_synchronize.json").read_text(), ) def pr_comment_event(): return json.loads( - (DATA_DIR / "webhooks" / "github" / "pr_comment_copr_build.json").read_text() + (DATA_DIR / "webhooks" / "github" / "pr_comment_copr_build.json").read_text(), ) @@ -23,7 +23,7 @@ def pr_comment_event_not_collaborator(): return json.loads( ( DATA_DIR / "webhooks" / "copr_build" / "pr_comment_not_collaborator.json" - ).read_text() + ).read_text(), ) diff --git a/tests_openshift/openshift_integration/test_pkgtool.py b/tests_openshift/openshift_integration/test_pkgtool.py index 15758b11f..fd722f9d3 100644 --- a/tests_openshift/openshift_integration/test_pkgtool.py +++ b/tests_openshift/openshift_integration/test_pkgtool.py @@ -28,16 +28,17 @@ @record_requests_for_all_methods() @apply_decorator_to_all_methods( replace_module_match( - what="packit.utils.run_command_remote", decorate=Simple.decorator_plain() - ) + what="packit.utils.run_command_remote", + decorate=Simple.decorator_plain(), + ), ) @apply_decorator_to_all_methods( replace_module_match( what="packit.pkgtool.PkgTool.clone", decorate=StoreFiles.where_arg_references( - key_position_params_dict={"target_path": 2} + key_position_params_dict={"target_path": 2}, ), - ) + ), ) @apply_decorator_to_all_methods( replace_module_match( @@ -46,35 +47,39 @@ key_position_params_dict={"to_path": 2}, output_cls=Repo, ), - ) + ), ) @apply_decorator_to_all_methods( replace_module_match( - what="git.remote.Remote.push", decorate=PushInfoStorageList.decorator_plain() - ) + what="git.remote.Remote.push", + decorate=PushInfoStorageList.decorator_plain(), + ), ) @apply_decorator_to_all_methods( replace_module_match( - what="git.remote.Remote.fetch", decorate=FetchInfoStorageList.decorator_plain() - ) + what="git.remote.Remote.fetch", + decorate=FetchInfoStorageList.decorator_plain(), + ), ) @apply_decorator_to_all_methods( replace_module_match( - what="git.remote.Remote.pull", decorate=FetchInfoStorageList.decorator_plain() - ) + what="git.remote.Remote.pull", + decorate=FetchInfoStorageList.decorator_plain(), + ), ) @apply_decorator_to_all_methods( - replace_module_match(what="tempfile.mkdtemp", decorate=MkDTemp.decorator_plain()) + replace_module_match(what="tempfile.mkdtemp", decorate=MkDTemp.decorator_plain()), ) @apply_decorator_to_all_methods( - replace_module_match(what="tempfile.mktemp", decorate=MkTemp.decorator_plain()) + replace_module_match(what="tempfile.mktemp", decorate=MkTemp.decorator_plain()), ) # Be aware that decorator stores login and token to test_data, replace it by some value. # Default precommit hook doesn't do that for copr.v3.helpers, see README.md @apply_decorator_to_all_methods( replace_module_match( - what="copr.v3.helpers.config_from_file", decorate=Simple.decorator_plain() - ) + what="copr.v3.helpers.config_from_file", + decorate=Simple.decorator_plain(), + ), ) class Pkgtool(PackitServiceTestCase): def setUp(self) -> None: diff --git a/tests_openshift/service/test_api.py b/tests_openshift/service/test_api.py index 784a57239..fe8890bfa 100644 --- a/tests_openshift/service/test_api.py +++ b/tests_openshift/service/test_api.py @@ -52,7 +52,9 @@ def test_copr_builds_list(client, clean_before_and_after, multiple_copr_builds): # Test Copr Builds with status waiting_for_srpm def test_copr_builds_list_waiting_for_srpm( - client, clean_before_and_after, a_copr_build_waiting_for_srpm + client, + clean_before_and_after, + a_copr_build_waiting_for_srpm, ): response = client.get(url_for("api.copr-builds_copr_builds_list")) response_dict = response.json @@ -62,7 +64,7 @@ def test_copr_builds_list_waiting_for_srpm( # Test Pagination def test_pagination(client, clean_before_and_after, too_many_copr_builds): response_1 = client.get( - url_for("api.copr-builds_copr_builds_list") + "?page=2&per_page=20" + url_for("api.copr-builds_copr_builds_list") + "?page=2&per_page=20", ) response_dict_1 = response_1.json assert len(list(response_dict_1[1]["status_per_chroot"])) == 2 @@ -70,7 +72,7 @@ def test_pagination(client, clean_before_and_after, too_many_copr_builds): assert len(response_dict_1) == 20 # three builds, but two unique build ids response_2 = client.get( - url_for("api.copr-builds_copr_builds_list") + "?page=1&per_page=30" + url_for("api.copr-builds_copr_builds_list") + "?page=1&per_page=30", ) response_dict_2 = response_2.json assert len(list(response_dict_2[1]["status_per_chroot"])) == 2 @@ -81,7 +83,7 @@ def test_pagination(client, clean_before_and_after, too_many_copr_builds): # Test detailed build info def test_detailed_copr_build_info(client, clean_before_and_after, a_copr_build_for_pr): response = client.get( - url_for("api.copr-builds_copr_build_item", id=a_copr_build_for_pr.id) + url_for("api.copr-builds_copr_build_item", id=a_copr_build_for_pr.id), ) response_dict = response.json assert response_dict["build_id"] == SampleValues.build_id @@ -127,10 +129,12 @@ def test_koji_builds_list(client, clean_before_and_after, multiple_koji_builds): def test_koji_builds_list_non_scratch( - client, clean_before_and_after, multiple_koji_builds + client, + clean_before_and_after, + multiple_koji_builds, ): response = client.get( - url_for("api.koji-builds_koji_builds_list") + "?scratch=false" + url_for("api.koji-builds_koji_builds_list") + "?scratch=false", ) response_dict = response.json assert len(response_dict) == 1 @@ -144,7 +148,7 @@ def test_koji_builds_list_scratch(client, clean_before_and_after, multiple_koji_ def test_detailed_koji_build_info(client, clean_before_and_after, a_koji_build_for_pr): response = client.get( - url_for("api.koji-builds_koji_build_item", id=a_koji_build_for_pr.id) + url_for("api.koji-builds_koji_build_item", id=a_koji_build_for_pr.id), ) response_dict = response.json assert response_dict["task_id"] == SampleValues.build_id @@ -168,12 +172,15 @@ def test_detailed_koji_build_info(client, clean_before_and_after, a_koji_build_f def test_detailed_koji_build_info_non_scratch( - client, clean_before_and_after, a_koji_build_for_pr_non_scratch + client, + clean_before_and_after, + a_koji_build_for_pr_non_scratch, ): response = client.get( url_for( - "api.koji-builds_koji_build_item", id=a_koji_build_for_pr_non_scratch.id - ) + "api.koji-builds_koji_build_item", + id=a_koji_build_for_pr_non_scratch.id, + ), ) response_dict = response.json assert response_dict["task_id"] == SampleValues.build_id @@ -189,30 +196,36 @@ def test_detailed_koji_build_info_non_scratch( def test_detailed_koji_build_info_for_pr( - client, clean_before_and_after, a_koji_build_for_pr + client, + clean_before_and_after, + a_koji_build_for_pr, ): response = client.get( - url_for("api.koji-builds_koji_build_item", id=a_koji_build_for_pr.id) + url_for("api.koji-builds_koji_build_item", id=a_koji_build_for_pr.id), ) response_dict = response.json assert response_dict["pr_id"] == SampleValues.pr_id def test_detailed_koji_build_info_for_branch_push( - client, clean_before_and_after, a_koji_build_for_branch_push + client, + clean_before_and_after, + a_koji_build_for_branch_push, ): response = client.get( - url_for("api.koji-builds_koji_build_item", id=a_koji_build_for_branch_push.id) + url_for("api.koji-builds_koji_build_item", id=a_koji_build_for_branch_push.id), ) response_dict = response.json assert response_dict["branch_name"] == SampleValues.branch def test_detailed_koji_build_info_for_release( - client, clean_before_and_after, a_koji_build_for_release + client, + clean_before_and_after, + a_koji_build_for_release, ): response = client.get( - url_for("api.koji-builds_koji_build_item", id=a_koji_build_for_release.id) + url_for("api.koji-builds_koji_build_item", id=a_koji_build_for_release.id), ) response_dict = response.json assert response_dict["release"] == SampleValues.tag_name @@ -221,7 +234,7 @@ def test_detailed_koji_build_info_for_release( # Test SRPM Builds def test_srpm_builds_list(client, clean_before_and_after, a_copr_build_for_pr): response = client.get( - url_for("api.srpm-builds_srpm_builds_list", id=a_copr_build_for_pr.id) + url_for("api.srpm-builds_srpm_builds_list", id=a_copr_build_for_pr.id), ) response_dict = response.json assert response_dict[0]["status"] == "success" @@ -236,11 +249,13 @@ def test_srpm_builds_list(client, clean_before_and_after, a_copr_build_for_pr): def test_srpm_build_info( - client, clean_before_and_after, srpm_build_model_with_new_run_for_pr + client, + clean_before_and_after, + srpm_build_model_with_new_run_for_pr, ): srpm_build_model, _ = srpm_build_model_with_new_run_for_pr response = client.get( - url_for("api.srpm-builds_srpm_build_item", id=srpm_build_model.id) + url_for("api.srpm-builds_srpm_build_item", id=srpm_build_model.id), ) response_dict = response.json @@ -259,11 +274,13 @@ def test_srpm_build_info( def test_srpm_build_in_copr_info( - client, clean_before_and_after, srpm_build_in_copr_model + client, + clean_before_and_after, + srpm_build_in_copr_model, ): srpm_build_model, _ = srpm_build_in_copr_model response = client.get( - url_for("api.srpm-builds_srpm_build_item", id=srpm_build_model.id) + url_for("api.srpm-builds_srpm_build_item", id=srpm_build_model.id), ) response_dict = response.json @@ -287,19 +304,21 @@ def test_allowlist_all(client, clean_before_and_after, new_allowlist_entry): def test_allowlist_specific(client, clean_before_and_after, new_allowlist_entry): """Test Allowlist API (specific user)""" user_1 = client.get( - url_for("api.allowlist_allowlist_item", namespace="github.com/Rayquaza") + url_for("api.allowlist_allowlist_item", namespace="github.com/Rayquaza"), ) assert user_1.json["namespace"] == "github.com/Rayquaza" assert user_1.json["status"] == "approved_manually" user_2 = client.get( - url_for("api.allowlist_allowlist_item", namespace="github.com/Zacian") + url_for("api.allowlist_allowlist_item", namespace="github.com/Zacian"), ) assert user_2.status_code == 204 # No content when not in allowlist def test_get_testing_farm_results( - client, clean_before_and_after, multiple_new_test_runs + client, + clean_before_and_after, + multiple_new_test_runs, ): """Test Get Testing Farm Results""" response = client.get(url_for("api.testing-farm_testing_farm_results")) @@ -328,7 +347,7 @@ def test_get_testing_farm_results( def test_get_testing_farm_result(client, clean_before_and_after, a_new_test_run_pr): response = client.get( - url_for("api.testing-farm_testing_farm_result", id=a_new_test_run_pr.id) + url_for("api.testing-farm_testing_farm_result", id=a_new_test_run_pr.id), ) response_dict = response.json @@ -359,21 +378,25 @@ def test_get_projects_list(client, clean_before_and_after, a_copr_build_for_pr): def test_get_projects_list_forge( - client, clean_before_and_after, multiple_forge_projects + client, + clean_before_and_after, + multiple_forge_projects, ): """Test Get Projects by Forge""" response = client.get( url_for( "api.projects_projects_forge", forge="github.com", - ) + ), ) response_dict = response.json assert len(response_dict) == 2 def test_get_projects_list_namespace( - client, clean_before_and_after, multiple_copr_builds + client, + clean_before_and_after, + multiple_copr_builds, ): """Test Get Projects by Namespace""" response = client.get( @@ -381,7 +404,7 @@ def test_get_projects_list_namespace( "api.projects_projects_namespace", forge="github.com", namespace="the-namespace", - ) + ), ) response_dict = response.json assert len(response_dict) == 1 @@ -397,7 +420,7 @@ def test_get_project_info(client, clean_before_and_after, a_copr_build_for_pr): forge="github.com", namespace="the-namespace", repo_name="the-repo-name", - ) + ), ) project = response.json assert project["namespace"] == SampleValues.repo_namespace @@ -414,7 +437,7 @@ def test_get_projects_prs(client, clean_before_and_after, a_copr_build_for_pr): forge="github.com", namespace="the-namespace", repo_name="the-repo-name", - ) + ), ) response_dict = response.json assert len(response_dict) == 1 @@ -432,7 +455,7 @@ def test_get_projects_prs_koji(client, clean_before_and_after, a_koji_build_for_ forge="github.com", namespace="the-namespace", repo_name="the-repo-name", - ) + ), ) response_dict = response.json assert len(response_dict) == 1 @@ -449,7 +472,7 @@ def test_get_projects_issues(client, clean_before_and_after, an_issue_model): forge="github.com", namespace="the-namespace", repo_name="the-repo-name", - ) + ), ) response_dict = response.json assert response_dict[0] == SampleValues.issue_id @@ -463,7 +486,7 @@ def test_get_projects_releases(client, clean_before_and_after, release_model): forge="github.com", namespace="the-namespace", repo_name="the-repo-name", - ) + ), ) response_dict = response.json assert len(response_dict) == 1 @@ -472,7 +495,9 @@ def test_get_projects_releases(client, clean_before_and_after, release_model): def test_get_projects_branches( - client, clean_before_and_after, a_copr_build_for_branch_push + client, + clean_before_and_after, + a_copr_build_for_branch_push, ): """Test Get Project's Releases""" response = client.get( @@ -481,7 +506,7 @@ def test_get_projects_branches( forge="github.com", namespace="the-namespace", repo_name="the-repo-name", - ) + ), ) response_dict = response.json assert len(response_dict) == 1 @@ -606,13 +631,15 @@ def test_propose_downstream_list_issues( def test_detailed_propose_info_release( - client, clean_before_and_after, propose_model_submitted_release + client, + clean_before_and_after, + propose_model_submitted_release, ): response = client.get( url_for( "api.propose-downstream_propose_result", id=propose_model_submitted_release.id, - ) + ), ) response_dict = response.json @@ -633,13 +660,15 @@ def test_detailed_propose_info_release( def test_detailed_pull_from_upstream_info( - client, clean_before_and_after, pull_from_upstream_target_model + client, + clean_before_and_after, + pull_from_upstream_target_model, ): response = client.get( url_for( "api.pull-from-upstream_pull_result", id=pull_from_upstream_target_model.id, - ) + ), ) response_dict = response.json @@ -660,13 +689,15 @@ def test_detailed_pull_from_upstream_info( def test_detailed_pull_from_upstream_info_non_git( - client, clean_before_and_after, pull_from_upstream_target_model_non_git + client, + clean_before_and_after, + pull_from_upstream_target_model_non_git, ): response = client.get( url_for( "api.pull-from-upstream_pull_result", id=pull_from_upstream_target_model_non_git.id, - ) + ), ) response_dict = response.json @@ -693,12 +724,15 @@ def test_detailed_pull_from_upstream_info_non_git( def test_detailed_propose_info_issue( - client, clean_before_and_after, propose_model_submitted_issue + client, + clean_before_and_after, + propose_model_submitted_issue, ): response = client.get( url_for( - "api.propose-downstream_propose_result", id=propose_model_submitted_issue.id - ) + "api.propose-downstream_propose_result", + id=propose_model_submitted_issue.id, + ), ) response_dict = response.json @@ -706,13 +740,15 @@ def test_detailed_propose_info_issue( def test_detailed_pull_from_upstream_without_pr_model( - client, clean_before_and_after, pull_from_upstream_target_model_without_pr_model + client, + clean_before_and_after, + pull_from_upstream_target_model_without_pr_model, ): response = client.get( url_for( "api.pull-from-upstream_pull_result", id=pull_from_upstream_target_model_without_pr_model.id, - ) + ), ) response_dict = response.json @@ -831,7 +867,7 @@ def test_project_usage_info( forge="github.com", namespace="the-namespace", repo_name="the-repo-name", - ) + ), ) response_dict = response.json @@ -850,7 +886,12 @@ def test_project_usage_info( assert nested_get(response_dict, "jobs", "srpm_builds", "job_runs") == 13 assert ( nested_get( - response_dict, "jobs", "srpm_builds", "per_event", "release", "job_runs" + response_dict, + "jobs", + "srpm_builds", + "per_event", + "release", + "job_runs", ) == 1 ) @@ -910,7 +951,7 @@ def test_bodhi_update_info( bodhi_update_model, ): response = client.get( - url_for("api.bodhi-updates_bodhi_update_item", id=bodhi_update_model.id) + url_for("api.bodhi-updates_bodhi_update_item", id=bodhi_update_model.id), ) response_dict = response.json assert response_dict["alias"] == SampleValues.alias From 5fcb9cc90d087ac66281f9dd634bf6a5f0d7198e Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Tue, 22 Oct 2024 13:56:04 +0200 Subject: [PATCH 05/13] ci(ruff): enable pyupgrade And disable the discrete pyupgrade in pre-commit Signed-off-by: Matej Focko --- .pre-commit-config.yaml | 4 - .../68ce6a306b30_add_koji_build_groups.py | 6 +- ...23c9_allow_multiple_forges_in_allowlist.py | 4 +- .../9fe0e970880f_add_copr_build_groups.py | 6 +- .../a9c49475e9c7_add_testing_farm_groups.py | 4 +- alembic/versions/c6250555a36c_.py | 4 +- ..._add_tables_for_triggers_koji_and_tests.py | 3 +- files/scripts/webhook.py | 4 +- packit_service/config.py | 22 ++--- packit_service/constants.py | 5 +- packit_service/models.py | 84 +++++++++---------- packit_service/sentry_integration.py | 5 +- packit_service/service/api/runs.py | 5 +- packit_service/service/api/utils.py | 4 +- packit_service/service/db_project_events.py | 10 +-- packit_service/utils.py | 10 +-- packit_service/worker/allowlist.py | 15 ++-- packit_service/worker/celery_task.py | 4 +- packit_service/worker/events/comment.py | 16 ++-- packit_service/worker/events/copr.py | 4 +- packit_service/worker/events/event.py | 30 +++---- packit_service/worker/events/github.py | 20 ++--- packit_service/worker/events/gitlab.py | 8 +- packit_service/worker/events/koji.py | 16 ++-- packit_service/worker/events/new_hotness.py | 4 +- packit_service/worker/events/pagure.py | 6 +- packit_service/worker/events/testing_farm.py | 4 +- packit_service/worker/handlers/abstract.py | 26 +++--- packit_service/worker/handlers/bodhi.py | 10 +-- packit_service/worker/handlers/copr.py | 8 +- packit_service/worker/handlers/distgit.py | 22 ++--- packit_service/worker/handlers/forges.py | 3 +- packit_service/worker/handlers/koji.py | 6 +- packit_service/worker/handlers/mixin.py | 3 +- .../worker/handlers/testing_farm.py | 16 ++-- packit_service/worker/handlers/usage.py | 4 +- packit_service/worker/handlers/vm_image.py | 5 +- packit_service/worker/helpers/job_helper.py | 6 +- packit_service/worker/helpers/sidetag.py | 10 +-- .../sync_release/propose_downstream.py | 10 +-- .../sync_release/pull_from_upstream.py | 4 +- .../helpers/sync_release/sync_release.py | 12 +-- packit_service/worker/helpers/testing_farm.py | 62 +++++++------- packit_service/worker/jobs.py | 63 +++++++------- packit_service/worker/mixin.py | 6 +- packit_service/worker/parser.py | 10 +-- packit_service/worker/reporting/enums.py | 6 +- .../worker/reporting/reporters/base.py | 6 +- .../worker/reporting/reporters/github.py | 8 +- .../worker/reporting/reporters/gitlab.py | 4 +- .../worker/reporting/reporters/pagure.py | 4 +- packit_service/worker/result.py | 4 +- packit_service/worker/tasks.py | 4 +- ruff.toml | 2 +- tests/integration/test_pr_comment.py | 3 +- tests/spellbook.py | 6 +- tests/unit/test_allowlist.py | 6 +- tests/unit/test_copr_build.py | 4 +- tests/unit/test_jobs.py | 8 +- tests/unit/test_testing_farm.py | 5 +- 60 files changed, 322 insertions(+), 341 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 736564d7e..aa0dceaef 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -7,10 +7,6 @@ repos: rev: 24.8.0 hooks: - id: black - - repo: https://github.com/asottile/pyupgrade - rev: v3.17.0 - hooks: - - id: pyupgrade - repo: https://github.com/pre-commit/mirrors-prettier rev: v4.0.0-alpha.8 hooks: diff --git a/alembic/versions/68ce6a306b30_add_koji_build_groups.py b/alembic/versions/68ce6a306b30_add_koji_build_groups.py index b3afff9bb..bd9aef9a1 100644 --- a/alembic/versions/68ce6a306b30_add_koji_build_groups.py +++ b/alembic/versions/68ce6a306b30_add_koji_build_groups.py @@ -10,7 +10,7 @@ import enum import itertools from datetime import datetime -from typing import TYPE_CHECKING, List +from typing import TYPE_CHECKING from packit_service.models import ProjectAndEventsConnector @@ -335,7 +335,7 @@ class TFTTestRunGroupModel(ProjectAndEventsConnector, GroupModel, Base): ) @property - def grouped_targets(self) -> List["TFTTestRunTargetModel"]: + def grouped_targets(self) -> list["TFTTestRunTargetModel"]: return self.tft_test_run_targets @@ -351,7 +351,7 @@ class CoprBuildGroupModel(ProjectAndEventsConnector, GroupModel, Base): ) @property - def grouped_targets(self) -> List["CoprBuildTargetModel"]: + def grouped_targets(self) -> list["CoprBuildTargetModel"]: return self.copr_build_targets diff --git a/alembic/versions/800abbbb23c9_allow_multiple_forges_in_allowlist.py b/alembic/versions/800abbbb23c9_allow_multiple_forges_in_allowlist.py index e06fddae0..3b253c372 100644 --- a/alembic/versions/800abbbb23c9_allow_multiple_forges_in_allowlist.py +++ b/alembic/versions/800abbbb23c9_allow_multiple_forges_in_allowlist.py @@ -7,7 +7,7 @@ """ import enum -from typing import TYPE_CHECKING, Dict +from typing import TYPE_CHECKING from alembic import op import sqlalchemy as sa @@ -52,7 +52,7 @@ class AllowlistModel(Base): status = Column(Enum(AllowlistStatus)) fas_account = Column(String) - def to_dict(self) -> Dict[str, str]: + def to_dict(self) -> dict[str, str]: return { "namespace": self.namespace, "status": self.status, diff --git a/alembic/versions/9fe0e970880f_add_copr_build_groups.py b/alembic/versions/9fe0e970880f_add_copr_build_groups.py index e14f9a2f0..981ff10bc 100644 --- a/alembic/versions/9fe0e970880f_add_copr_build_groups.py +++ b/alembic/versions/9fe0e970880f_add_copr_build_groups.py @@ -10,7 +10,7 @@ import enum import itertools from datetime import datetime -from typing import TYPE_CHECKING, List +from typing import TYPE_CHECKING from packit_service.models import ProjectAndEventsConnector @@ -327,7 +327,7 @@ class TFTTestRunGroupModel(ProjectAndEventsConnector, GroupModel, Base): ) @property - def grouped_targets(self) -> List["TFTTestRunTargetModel"]: + def grouped_targets(self) -> list["TFTTestRunTargetModel"]: return self.tft_test_run_targets @@ -343,7 +343,7 @@ class CoprBuildGroupModel(ProjectAndEventsConnector, GroupModel, Base): ) @property - def grouped_targets(self) -> List["CoprBuildTargetModel"]: + def grouped_targets(self) -> list["CoprBuildTargetModel"]: return self.copr_build_targets diff --git a/alembic/versions/a9c49475e9c7_add_testing_farm_groups.py b/alembic/versions/a9c49475e9c7_add_testing_farm_groups.py index 966a7f970..1f8e44bd5 100644 --- a/alembic/versions/a9c49475e9c7_add_testing_farm_groups.py +++ b/alembic/versions/a9c49475e9c7_add_testing_farm_groups.py @@ -10,7 +10,7 @@ import enum import itertools from datetime import datetime -from typing import TYPE_CHECKING, List +from typing import TYPE_CHECKING from packit_service.models import ProjectAndEventsConnector @@ -318,7 +318,7 @@ class TFTTestRunGroupModel(ProjectAndEventsConnector, GroupModel, Base): ) @property - def grouped_targets(self) -> List["TFTTestRunTargetModel"]: + def grouped_targets(self) -> list["TFTTestRunTargetModel"]: return self.tft_test_run_targets diff --git a/alembic/versions/c6250555a36c_.py b/alembic/versions/c6250555a36c_.py index 5369d83f4..2fbacd6f9 100644 --- a/alembic/versions/c6250555a36c_.py +++ b/alembic/versions/c6250555a36c_.py @@ -11,7 +11,7 @@ import logging from datetime import datetime, timezone from os import getenv -from typing import TYPE_CHECKING, Union, List +from typing import TYPE_CHECKING, Union from alembic import op from celery.backends.database import Task @@ -239,7 +239,7 @@ class RedisCoprBuild(RedisBuild): table_name = "copr-builds" project: str owner: str - chroots: List[str] + chroots: list[str] # Postgres models diff --git a/alembic/versions/d90948124e46_add_tables_for_triggers_koji_and_tests.py b/alembic/versions/d90948124e46_add_tables_for_triggers_koji_and_tests.py index b5bc8f5a3..32d5b7fba 100644 --- a/alembic/versions/d90948124e46_add_tables_for_triggers_koji_and_tests.py +++ b/alembic/versions/d90948124e46_add_tables_for_triggers_koji_and_tests.py @@ -7,7 +7,8 @@ """ import enum -from typing import TYPE_CHECKING, Optional, Iterable +from typing import TYPE_CHECKING, Optional +from collections.abc import Iterable import sqlalchemy as sa from alembic import op diff --git a/files/scripts/webhook.py b/files/scripts/webhook.py index f61dcdbc1..b92fd73b6 100644 --- a/files/scripts/webhook.py +++ b/files/scripts/webhook.py @@ -7,7 +7,7 @@ Generator of webhooks """ import json -from typing import Union, Dict +from typing import Union import click import ogr @@ -32,7 +32,7 @@ def __init__( self.pr_id = pr_id self.github_token = github_token - def generate(self) -> Dict: + def generate(self) -> dict: s = ogr.GithubService(token=self.github_token) project = s.get_project(namespace=self.namespace, repo=self.project_name) pr_info = project.get_pr(self.pr_id) diff --git a/packit_service/config.py b/packit_service/config.py index df4228dfe..1ae827a55 100644 --- a/packit_service/config.py +++ b/packit_service/config.py @@ -4,7 +4,7 @@ import logging import os from pathlib import Path -from typing import List, NamedTuple, Optional, Set, Union +from typing import NamedTuple, Optional, Union from yaml import safe_load @@ -99,15 +99,15 @@ def __init__( validate_webhooks: bool = True, admins: list = None, fas_password: Optional[str] = "", - enabled_private_namespaces: Union[Set[str], List[str]] = None, + enabled_private_namespaces: Union[set[str], list[str]] = None, gitlab_token_secret: str = "", - gitlab_mr_targets_handled: List[MRTarget] = None, - projects_to_sync: List[ProjectToSync] = None, - enabled_projects_for_internal_tf: Union[Set[str], List[str]] = None, + gitlab_mr_targets_handled: list[MRTarget] = None, + projects_to_sync: list[ProjectToSync] = None, + enabled_projects_for_internal_tf: Union[set[str], list[str]] = None, dashboard_url: str = "", koji_logs_url: str = "https://kojipkgs.fedoraproject.org", koji_web_url: str = "https://koji.fedoraproject.org", - enabled_projects_for_srpm_in_copr: Union[Set[str], List[str]] = None, + enabled_projects_for_srpm_in_copr: Union[set[str], list[str]] = None, comment_command_prefix: str = "/packit", redhat_api_refresh_token: str = None, package_config_path_override: Optional[str] = None, @@ -132,7 +132,7 @@ def __init__( self.fas_password = fas_password # List of github users who are allowed to trigger p-s on any repository - self.admins: Set[str] = set(admins or []) + self.admins: set[str] = set(admins or []) # for flask SERVER_NAME so we can create links to logs self.server_name: str = "" @@ -140,20 +140,20 @@ def __init__( # Gitlab token secret to decode JWT tokens self.gitlab_token_secret: str = gitlab_token_secret - self.gitlab_mr_targets_handled: List[MRTarget] = gitlab_mr_targets_handled + self.gitlab_mr_targets_handled: list[MRTarget] = gitlab_mr_targets_handled # Explicit list of private namespaces we work with # e.g.: # - github.com/other-private-namespace # - gitlab.com/private/namespace - self.enabled_private_namespaces: Set[str] = set( + self.enabled_private_namespaces: set[str] = set( enabled_private_namespaces or [], ) # Explicit list of project we allow the internal TF instance to be used- # e.g.: # - github.com/other-private-namespace/project # - gitlab.com/namespace/project - self.enabled_projects_for_internal_tf: Set[str] = set( + self.enabled_projects_for_internal_tf: set[str] = set( enabled_projects_for_internal_tf or [], ) @@ -164,7 +164,7 @@ def __init__( self.koji_logs_url = koji_logs_url self.koji_web_url = koji_web_url - self.enabled_projects_for_srpm_in_copr: Set[str] = set( + self.enabled_projects_for_srpm_in_copr: set[str] = set( enabled_projects_for_srpm_in_copr or [], ) self.comment_command_prefix = comment_command_prefix diff --git a/packit_service/constants.py b/packit_service/constants.py index a8e68dc8e..b8f032b58 100644 --- a/packit_service/constants.py +++ b/packit_service/constants.py @@ -1,7 +1,6 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT from enum import Enum -from typing import List from datetime import datetime, timedelta CONTACTS_URL = "https://packit.dev/#contact" @@ -260,12 +259,12 @@ def from_number(number: int): DASHBOARD_JOBS_TESTING_FARM_PATH = "/jobs/testing-farm-runs" # https://docs.testing-farm.io/general/0.1/test-environment.html#_supported_architectures -PUBLIC_TF_ARCHITECTURE_LIST: List[str] = [ +PUBLIC_TF_ARCHITECTURE_LIST: list[str] = [ "aarch64", "x86_64", ] -INTERNAL_TF_ARCHITECTURE_LIST: List[str] = [ +INTERNAL_TF_ARCHITECTURE_LIST: list[str] = [ "aarch64", "ppc64le", "s390x", diff --git a/packit_service/models.py b/packit_service/models.py index 9eb4a9181..44aa229bc 100644 --- a/packit_service/models.py +++ b/packit_service/models.py @@ -12,18 +12,12 @@ from datetime import datetime, timedelta, timezone from os import getenv from typing import ( - Dict, - Generator, - Iterable, - List, Optional, TYPE_CHECKING, - Tuple, - Type, Union, - Set, overload, ) +from collections.abc import Generator, Iterable from urllib.parse import urlparse from cachetools.func import ttl_cache @@ -177,14 +171,14 @@ def get_submitted_time_from_model( @overload def get_most_recent_targets( models: Iterable["CoprBuildTargetModel"], -) -> List["CoprBuildTargetModel"]: +) -> list["CoprBuildTargetModel"]: """Overload for type-checking""" @overload def get_most_recent_targets( models: Iterable["TFTTestRunTargetModel"], -) -> List["TFTTestRunTargetModel"]: +) -> list["TFTTestRunTargetModel"]: """Overload for type-checking""" @@ -193,7 +187,7 @@ def get_most_recent_targets( Iterable["CoprBuildTargetModel"], Iterable["TFTTestRunTargetModel"], ], -) -> Union[List["CoprBuildTargetModel"], List["TFTTestRunTargetModel"]]: +) -> Union[list["CoprBuildTargetModel"], list["TFTTestRunTargetModel"]]: """ Gets most recent models from an iterable (regarding submission time). @@ -220,16 +214,16 @@ def get_most_recent_targets( @overload def filter_most_recent_target_models_by_status( models: Iterable["CoprBuildTargetModel"], - statuses_to_filter_with: List[str], -) -> Set["CoprBuildTargetModel"]: + statuses_to_filter_with: list[str], +) -> set["CoprBuildTargetModel"]: """Overload for type-checking""" @overload def filter_most_recent_target_models_by_status( models: Iterable["TFTTestRunTargetModel"], - statuses_to_filter_with: List[str], -) -> Set["TFTTestRunTargetModel"]: + statuses_to_filter_with: list[str], +) -> set["TFTTestRunTargetModel"]: """Overload for type-checking""" @@ -238,8 +232,8 @@ def filter_most_recent_target_models_by_status( Iterable["CoprBuildTargetModel"], Iterable["TFTTestRunTargetModel"], ], - statuses_to_filter_with: List[str], -) -> Union[Set["CoprBuildTargetModel"], Set["TFTTestRunTargetModel"]]: + statuses_to_filter_with: list[str], +) -> Union[set["CoprBuildTargetModel"], set["TFTTestRunTargetModel"]]: logger.info( f"Trying to filter targets with possible status: {statuses_to_filter_with} in {models}", ) @@ -259,8 +253,8 @@ def filter_most_recent_target_names_by_status( Iterable["CoprBuildTargetModel"], Iterable["TFTTestRunTargetModel"], ], - statuses_to_filter_with: List[str], -) -> Optional[Set[str]]: + statuses_to_filter_with: list[str], +) -> Optional[set[str]]: filtered_models = filter_most_recent_target_models_by_status( models, statuses_to_filter_with, @@ -301,14 +295,14 @@ def get_project_event_models(self) -> Iterable["ProjectEventModel"]: event_id=self.id, ) - def get_runs(self) -> List["PipelineModel"]: + def get_runs(self) -> list["PipelineModel"]: project_events = self.get_project_event_models() return [run for project_event in project_events for run in project_event.runs] def _get_run_item( self, - model_type: Type["AbstractBuildTestDbType"], - ) -> List["AbstractBuildTestDbType"]: + model_type: type["AbstractBuildTestDbType"], + ) -> list["AbstractBuildTestDbType"]: runs = self.get_runs() models = [] @@ -352,7 +346,7 @@ class ProjectAndEventsConnector: to share methods for accessing project and project events models. """ - runs: Optional[List["PipelineModel"]] + runs: Optional[list["PipelineModel"]] def get_project_event_model(self) -> Optional["ProjectEventModel"]: return self.runs[0].project_event if self.runs else None @@ -898,7 +892,7 @@ def get_project_count( @classmethod @ttl_cache(maxsize=_CACHE_MAXSIZE, ttl=_CACHE_TTL) - def get_instance_numbers(cls) -> Dict[str, int]: + def get_instance_numbers(cls) -> dict[str, int]: """ Get the number of projects per each GIT instances. """ @@ -918,7 +912,7 @@ def get_instance_numbers_for_active_projects( cls, datetime_from=None, datetime_to=None, - ) -> Dict[str, int]: + ) -> dict[str, int]: """ Get the number of projects (at least one pipeline during the time period) per each GIT instances. @@ -1190,7 +1184,7 @@ def get_job_usage_numbers_all_project_events( @classmethod def get_known_onboarded_downstream_projects( cls, - ) -> Set["GitProjectModel"]: + ) -> set["GitProjectModel"]: """ List already known onboarded projects. An onboarded project is a project with a bodhi update or a koji build @@ -1577,9 +1571,9 @@ def __repr__(self): AnityaMultipleVersionsModel, ] -MODEL_FOR_PROJECT_EVENT: Dict[ +MODEL_FOR_PROJECT_EVENT: dict[ ProjectEventModelType, - Type[AbstractProjectObjectDbType], + type[AbstractProjectObjectDbType], ] = { ProjectEventModelType.pull_request: PullRequestModel, ProjectEventModelType.branch_push: GitBranchModel, @@ -1625,7 +1619,7 @@ def add_pull_request_event( repo_name: str, project_url: str, commit_sha: str, - ) -> Tuple[PullRequestModel, "ProjectEventModel"]: + ) -> tuple[PullRequestModel, "ProjectEventModel"]: pull_request = PullRequestModel.get_or_create( pr_id=pr_id, namespace=namespace, @@ -1647,7 +1641,7 @@ def add_branch_push_event( repo_name: str, project_url: str, commit_sha: str, - ) -> Tuple[GitBranchModel, "ProjectEventModel"]: + ) -> tuple[GitBranchModel, "ProjectEventModel"]: branch_push = GitBranchModel.get_or_create( branch_name=branch_name, namespace=namespace, @@ -1669,7 +1663,7 @@ def add_release_event( repo_name: str, project_url: str, commit_hash: str, - ) -> Tuple[ProjectReleaseModel, "ProjectEventModel"]: + ) -> tuple[ProjectReleaseModel, "ProjectEventModel"]: release = ProjectReleaseModel.get_or_create( tag_name=tag_name, namespace=namespace, @@ -1691,7 +1685,7 @@ def add_anitya_version_event( project_name: str, project_id: int, package: str, - ) -> Tuple[AnityaVersionModel, "ProjectEventModel"]: + ) -> tuple[AnityaVersionModel, "ProjectEventModel"]: project_version = AnityaVersionModel.get_or_create( version=version, project_name=project_name, @@ -1712,7 +1706,7 @@ def add_anitya_multiple_versions_event( project_name: str, project_id: int, package: str, - ) -> Tuple[AnityaMultipleVersionsModel, "ProjectEventModel"]: + ) -> tuple[AnityaMultipleVersionsModel, "ProjectEventModel"]: project_version = AnityaMultipleVersionsModel.get_or_create( versions=versions, project_name=project_name, @@ -1733,7 +1727,7 @@ def add_issue_event( namespace: str, repo_name: str, project_url: str, - ) -> Tuple[IssueModel, "ProjectEventModel"]: + ) -> tuple[IssueModel, "ProjectEventModel"]: issue = IssueModel.get_or_create( issue_id=issue_id, namespace=namespace, @@ -1755,7 +1749,7 @@ def add_koji_build_tag_event( namespace: str, repo_name: str, project_url: str, - ) -> Tuple[KojiBuildTagModel, "ProjectEventModel"]: + ) -> tuple[KojiBuildTagModel, "ProjectEventModel"]: target = None if sidetag := SidetagModel.get_by_koji_name(koji_tag_name): target = sidetag.target @@ -2008,7 +2002,7 @@ def __repr__(self) -> str: ) @property - def grouped_targets(self) -> List["CoprBuildTargetModel"]: + def grouped_targets(self) -> list["CoprBuildTargetModel"]: return self.copr_build_targets @classmethod @@ -2478,7 +2472,7 @@ def get_range(cls, first: int, last: int) -> Iterable["BodhiUpdateTargetModel"]: ) @classmethod - def get_all_projects(cls) -> Set["GitProjectModel"]: + def get_all_projects(cls) -> set["GitProjectModel"]: """Get all git projects with a saved successfull bodhi update.""" with sa_session_transaction() as session: query = ( @@ -2739,7 +2733,7 @@ def __repr__(self): ) @classmethod - def get_all_projects(cls) -> Set["GitProjectModel"]: + def get_all_projects(cls) -> set["GitProjectModel"]: """Get all git projects with a successful downstream koji build.""" with sa_session_transaction() as session: query = ( @@ -2793,7 +2787,7 @@ def create_with_new_run( package_name: Optional[str] = None, copr_build_id: Optional[str] = None, copr_web_url: Optional[str] = None, - ) -> Tuple["SRPMBuildModel", "PipelineModel"]: + ) -> tuple["SRPMBuildModel", "PipelineModel"]: """ Create a new model for SRPM and connect it to the PipelineModel. @@ -3012,7 +3006,7 @@ def get_all(cls) -> Iterable["AllowlistModel"]: with sa_session_transaction() as session: return session.query(AllowlistModel) - def to_dict(self) -> Dict[str, str]: + def to_dict(self) -> dict[str, str]: return { "namespace": self.namespace, "status": self.status, @@ -3079,7 +3073,7 @@ def __repr__(self) -> str: ) @classmethod - def create(cls, run_models: List["PipelineModel"]) -> "TFTTestRunGroupModel": + def create(cls, run_models: list["PipelineModel"]) -> "TFTTestRunGroupModel": with sa_session_transaction(commit=True) as session: test_run_group = cls() session.add(test_run_group) @@ -3102,7 +3096,7 @@ def create(cls, run_models: List["PipelineModel"]) -> "TFTTestRunGroupModel": return test_run_group @property - def grouped_targets(self) -> List["TFTTestRunTargetModel"]: + def grouped_targets(self) -> list["TFTTestRunTargetModel"]: return self.tft_test_run_targets @classmethod @@ -3170,7 +3164,7 @@ def create( web_url: Optional[str] = None, data: dict = None, identifier: Optional[str] = None, - copr_build_targets: Optional[List[CoprBuildTargetModel]] = None, + copr_build_targets: Optional[list[CoprBuildTargetModel]] = None, ) -> "TFTTestRunTargetModel": with sa_session_transaction(commit=True) as session: test_run = cls() @@ -3339,7 +3333,7 @@ def get_by_id(cls, id_: int) -> Optional["SyncReleaseTargetModel"]: return session.query(SyncReleaseTargetModel).filter_by(id=id_).first() @classmethod - def get_all_downstream_projects(cls) -> Set["GitProjectModel"]: + def get_all_downstream_projects(cls) -> set["GitProjectModel"]: """Get all downstream projects with a pr created by Packit.""" with sa_session_transaction() as session: query = ( @@ -3400,7 +3394,7 @@ def create_with_new_run( project_event_model: ProjectEventModel, job_type: SyncReleaseJobType, package_name: Optional[str] = None, - ) -> Tuple["SyncReleaseModel", "PipelineModel"]: + ) -> tuple["SyncReleaseModel", "PipelineModel"]: """ Create a new model for SyncRelease and connect it to the PipelineModel. @@ -4388,7 +4382,7 @@ def get_usage_data(datetime_from=None, datetime_to=None, top=10) -> dict: @cached(cache=TTLCache(maxsize=1, ttl=(60 * 60 * 24))) -def get_onboarded_projects() -> Tuple[dict[int, str], dict[int, str]]: +def get_onboarded_projects() -> tuple[dict[int, str], dict[int, str]]: """Returns a tuple with two dictionaries of project IDs and URLs: onboarded projects: projects which have a merged downstream PR, a Koji build or a Bodhi update diff --git a/packit_service/sentry_integration.py b/packit_service/sentry_integration.py index ca70c46f9..83d795d29 100644 --- a/packit_service/sentry_integration.py +++ b/packit_service/sentry_integration.py @@ -4,7 +4,6 @@ import logging from contextlib import contextmanager from os import getenv -from typing import List, Dict from sentry_sdk.integrations import Integration from sentry_sdk.integrations.logging import LoggingIntegration @@ -14,7 +13,7 @@ logger = logging.getLogger(__name__) -def traces_sampler(sampling_context: Dict) -> float: +def traces_sampler(sampling_context: dict) -> float: """ Compute sample rate or sampling decision for a transaction. https://docs.sentry.io/platforms/python/performance/ @@ -52,7 +51,7 @@ def configure_sentry( # so that we don't have to have sentry sdk installed locally import sentry_sdk - integrations: List[Integration] = [] + integrations: list[Integration] = [] if celery_integration: # https://docs.sentry.io/platforms/python/celery/ diff --git a/packit_service/service/api/runs.py b/packit_service/service/api/runs.py index ad0cecfc8..ea67eed1d 100644 --- a/packit_service/service/api/runs.py +++ b/packit_service/service/api/runs.py @@ -3,7 +3,6 @@ from http import HTTPStatus from logging import getLogger -from typing import Dict from flask_restx import Namespace, Resource @@ -32,7 +31,7 @@ ns = Namespace("runs", description="Pipelines") -def _add_sync_release(run: SyncReleaseModel, response_dict: Dict): +def _add_sync_release(run: SyncReleaseModel, response_dict: dict): targets = response_dict[run.job_type.value] for target in run.sync_release_targets: @@ -49,7 +48,7 @@ def _add_sync_release(run: SyncReleaseModel, response_dict: Dict): response_dict["trigger"] = get_project_info_from_build(run) -def _add_vm_image_build(run: VMImageBuildTargetModel, response_dict: Dict): +def _add_vm_image_build(run: VMImageBuildTargetModel, response_dict: dict): response_dict["vm_image_build"].append( { "packit_id": run.id, diff --git a/packit_service/service/api/utils.py b/packit_service/service/api/utils.py index 83a35e457..441751f61 100644 --- a/packit_service/service/api/utils.py +++ b/packit_service/service/api/utils.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT from http import HTTPStatus -from typing import Any, Dict, Union +from typing import Any, Union from flask.json import jsonify @@ -44,7 +44,7 @@ def get_project_info_from_build( BodhiUpdateTargetModel, VMImageBuildTargetModel, ], -) -> Dict[str, Any]: +) -> dict[str, Any]: if not (project := build.get_project()): return {} diff --git a/packit_service/service/db_project_events.py b/packit_service/service/db_project_events.py index acff9c457..ec072fc39 100644 --- a/packit_service/service/db_project_events.py +++ b/packit_service/service/db_project_events.py @@ -4,7 +4,7 @@ """ This file contains helper classes for events. """ -from typing import Optional, Dict +from typing import Optional from ogr.abstract import GitProject from packit_service.models import ( @@ -52,7 +52,7 @@ def db_project_event(self) -> ProjectEventModel: (_, event) = self._add_release_and_event() return event - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() # type: ignore result.pop("_release", None) result.pop("_event", None) @@ -89,7 +89,7 @@ def db_project_event(self) -> ProjectEventModel: (_, event) = self._add_branch_and_event() return event - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() # type: ignore result.pop("_branch", None) result.pop("_event", None) @@ -125,7 +125,7 @@ def db_project_event(self) -> ProjectEventModel: (_, event) = self._add_pull_request_and_event() return event - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() # type: ignore result.pop("_pull_request", None) result.pop("_event", None) @@ -161,7 +161,7 @@ def db_project_event(self) -> ProjectEventModel: (_, event) = self._add_issue_and_event() return event - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() # type: ignore result.pop("_issue", None) result.pop("_event", None) diff --git a/packit_service/utils.py b/packit_service/utils.py index e093b9d17..ac66a5bf5 100644 --- a/packit_service/utils.py +++ b/packit_service/utils.py @@ -8,7 +8,7 @@ from logging import StreamHandler from pathlib import Path from re import search -from typing import List, Tuple, Optional +from typing import Optional import requests @@ -65,7 +65,7 @@ def dump_job_config(job_config: JobConfig): return JobConfigSchema().dump(job_config) if job_config else None -def get_package_nvrs(built_packages: List[dict]) -> List[str]: +def get_package_nvrs(built_packages: list[dict]) -> list[str]: """ Construct package NVRs for built packages except the SRPM. @@ -85,7 +85,7 @@ def get_package_nvrs(built_packages: List[dict]) -> List[str]: return packages -def log_package_versions(package_versions: List[Tuple[str, str]]): +def log_package_versions(package_versions: list[tuple[str, str]]): """ It does the actual logging. @@ -101,7 +101,7 @@ def log_package_versions(package_versions: List[Tuple[str, str]]): # https://stackoverflow.com/a/41215655/14294700 def gather_packit_logs_to_buffer( logging_level: LoggingLevel, -) -> Tuple[StringIO, StreamHandler]: +) -> tuple[StringIO, StreamHandler]: """ Redirect packit logs into buffer with a given logging level to collect them later. @@ -201,7 +201,7 @@ def elapsed_seconds(begin: datetime, end: datetime) -> float: def get_packit_commands_from_comment( comment: str, packit_comment_command_prefix: str, -) -> List[str]: +) -> list[str]: comment_parts = comment.strip() if not comment_parts: diff --git a/packit_service/worker/allowlist.py b/packit_service/worker/allowlist.py index 20d4b8b71..fa7e08cec 100644 --- a/packit_service/worker/allowlist.py +++ b/packit_service/worker/allowlist.py @@ -2,7 +2,8 @@ # SPDX-License-Identifier: MIT import logging -from typing import Any, Iterable, Optional, Union, Callable, List, Tuple, Dict, Type +from typing import Any, Optional, Union, Callable +from collections.abc import Iterable from urllib.parse import urlparse from fasjson_client import Client @@ -265,13 +266,13 @@ def remove_namespace(namespace: str) -> bool: return True @staticmethod - def get_namespaces_by_status(status: AllowlistStatus) -> List[str]: + def get_namespaces_by_status(status: AllowlistStatus) -> list[str]: return [ account.namespace for account in AllowlistModel.get_by_status(status.value) ] @staticmethod - def waiting_namespaces() -> List[str]: + def waiting_namespaces() -> list[str]: """ Get namespaces waiting for approval. @@ -281,7 +282,7 @@ def waiting_namespaces() -> List[str]: return Allowlist.get_namespaces_by_status(AllowlistStatus.waiting) @staticmethod - def denied_namespaces() -> List[str]: + def denied_namespaces() -> list[str]: """ Get denied namespace. @@ -392,7 +393,7 @@ def _check_pr_report_status( short_msg, ): for job_config in job_configs: - job_helper_kls: Type[Union[TestingFarmJobHelper, CoprBuildJobHelper]] + job_helper_kls: type[Union[TestingFarmJobHelper, CoprBuildJobHelper]] if job_config.type == JobType.tests: job_helper_kls = TestingFarmJobHelper else: @@ -480,8 +481,8 @@ def check_and_report( :param job_configs: iterable of jobconfigs - so we know how to update status of the PR :return: """ - CALLBACKS: Dict[ - Union[type, Tuple[Union[type, Tuple[Any, ...]], ...]], + CALLBACKS: dict[ + Union[type, tuple[Union[type, tuple[Any, ...]], ...]], Callable, ] = { ( # events that are not checked against allowlist diff --git a/packit_service/worker/celery_task.py b/packit_service/worker/celery_task.py index 268e2909e..af5272817 100644 --- a/packit_service/worker/celery_task.py +++ b/packit_service/worker/celery_task.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT import logging -from typing import Optional, Any, Dict +from typing import Optional, Any from celery import Task @@ -45,7 +45,7 @@ def retry( ex: Optional[Exception] = None, delay: Optional[int] = None, max_retries: Optional[int] = None, - kargs: Optional[Dict[str, Any]] = None, + kargs: Optional[dict[str, Any]] = None, ) -> None: """ Retries the celery task. diff --git a/packit_service/worker/events/comment.py b/packit_service/worker/events/comment.py index 4af87d132..b2f4c4b99 100644 --- a/packit_service/worker/events/comment.py +++ b/packit_service/worker/events/comment.py @@ -5,7 +5,7 @@ abstract-comment event classes. """ from logging import getLogger -from typing import Dict, Optional, Set +from typing import Optional from ogr.abstract import Comment, Issue from packit_service.models import TestingFarmResult, BuildStatus @@ -38,7 +38,7 @@ def __init__( def comment_object(self) -> Optional[Comment]: raise NotImplementedError("Use subclass instead.") - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result.pop("_comment_object") return result @@ -53,8 +53,8 @@ def __init__( comment_id: int, commit_sha: str = "", comment_object: Optional[Comment] = None, - build_targets_override: Optional[Set[str]] = None, - tests_targets_override: Optional[Set[str]] = None, + build_targets_override: Optional[set[str]] = None, + tests_targets_override: Optional[set[str]] = None, ) -> None: super().__init__( pr_id=pr_id, @@ -84,7 +84,7 @@ def comment_object(self) -> Optional[Comment]: return self._comment_object @property - def build_targets_override(self) -> Optional[Set[str]]: + def build_targets_override(self) -> Optional[set[str]]: if not self._build_targets_override and "rebuild-failed" in self.comment: self._build_targets_override = ( super().get_all_build_targets_by_status( @@ -95,7 +95,7 @@ def build_targets_override(self) -> Optional[Set[str]]: return self._build_targets_override @property - def tests_targets_override(self) -> Optional[Set[str]]: + def tests_targets_override(self) -> Optional[set[str]]: if not self._tests_targets_override and "retest-failed" in self.comment: self._tests_targets_override = ( super().get_all_tf_targets_by_status( @@ -108,7 +108,7 @@ def tests_targets_override(self) -> Optional[Set[str]]: ) return self._tests_targets_override - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["commit_sha"] = self.commit_sha result.pop("_build_targets_override") @@ -175,7 +175,7 @@ def comment_object(self) -> Optional[Comment]: self._comment_object = self.issue_object.get_comment(self.comment_id) return self._comment_object - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["tag_name"] = self.tag_name result["commit_sha"] = self.commit_sha diff --git a/packit_service/worker/events/copr.py b/packit_service/worker/events/copr.py index 1dec59cce..1b9cab6f1 100644 --- a/packit_service/worker/events/copr.py +++ b/packit_service/worker/events/copr.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT from logging import getLogger -from typing import Optional, Dict, Union +from typing import Optional, Union from ogr.abstract import GitProject from ogr.services.pagure import PagureProject @@ -146,7 +146,7 @@ def pre_check(self): def get_non_serializable_attributes(self): return super().get_non_serializable_attributes() + ["build"] - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["topic"] = result["topic"].value return result diff --git a/packit_service/worker/events/event.py b/packit_service/worker/events/event.py index 851f7f263..3db669dad 100644 --- a/packit_service/worker/events/event.py +++ b/packit_service/worker/events/event.py @@ -7,7 +7,7 @@ import copy from datetime import datetime, timezone from logging import getLogger -from typing import Dict, Optional, Type, Union, Set, List +from typing import Optional, Union from ogr.abstract import GitProject, PullRequest from ogr.parsing import RepoUrl @@ -25,7 +25,7 @@ logger = getLogger(__name__) -MAP_EVENT_TO_JOB_CONFIG_TRIGGER_TYPE: Dict[Type["Event"], JobConfigTriggerType] = {} +MAP_EVENT_TO_JOB_CONFIG_TRIGGER_TYPE: dict[type["Event"], JobConfigTriggerType] = {} def use_for_job_config_trigger(trigger_type: JobConfigTriggerType): @@ -44,7 +44,7 @@ class KojiBuildEvent(AbstractKojiEvent): ``` """ - def _add_to_mapping(kls: Type["Event"]): + def _add_to_mapping(kls: type["Event"]): MAP_EVENT_TO_JOB_CONFIG_TRIGGER_TYPE[kls] = trigger_type return kls @@ -70,9 +70,9 @@ def __init__( event_dict: Optional[dict], issue_id: Optional[int], task_accepted_time: Optional[datetime], - build_targets_override: Optional[List[str]], - tests_targets_override: Optional[List[str]], - branches_override: Optional[List[str]], + build_targets_override: Optional[list[str]], + tests_targets_override: Optional[list[str]], + branches_override: Optional[list[str]], ): self.event_type = event_type self.actor = actor @@ -359,7 +359,7 @@ def __init__(self, created_at: Union[int, float, str] = None): self._db_project_event: Optional[ProjectEventModel] = None @staticmethod - def make_serializable(d: dict, skip: List) -> dict: + def make_serializable(d: dict, skip: list) -> dict: """We need a JSON serializable dict (because of redis and celery tasks) This method will copy everything from dict except the specified non serializable keys. @@ -398,7 +398,7 @@ def get_non_serializable_attributes(self): "_package_config_searched", ] - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: d = default_dict or self.__dict__ # whole dict has to be JSON serializable because of redis d = self.make_serializable(d, self.get_non_serializable_attributes()) @@ -482,7 +482,7 @@ def packages_config(self): raise NotImplementedError("Please implement me!") @property - def build_targets_override(self) -> Optional[Set[str]]: + def build_targets_override(self) -> Optional[set[str]]: """ Return the targets to use for building of the all targets from config for the relevant events (e.g.rerunning of a single check). @@ -490,7 +490,7 @@ def build_targets_override(self) -> Optional[Set[str]]: return None @property - def tests_targets_override(self) -> Optional[Set[str]]: + def tests_targets_override(self) -> Optional[set[str]]: """ Return the targets to use for testing of the all targets from config for the relevant events (e.g.rerunning of a single check). @@ -498,7 +498,7 @@ def tests_targets_override(self) -> Optional[Set[str]]: return None @property - def branches_override(self) -> Optional[Set[str]]: + def branches_override(self) -> Optional[set[str]]: """ Return the branches to use for propose-downstream of the all branches from config for the relevant events (e.g.rerunning of a single check). @@ -613,8 +613,8 @@ def get_packages_config(self) -> Optional[PackageConfig]: def get_all_tf_targets_by_status( self, - statuses_to_filter_with: List[str], - ) -> Optional[Set[str]]: + statuses_to_filter_with: list[str], + ) -> Optional[set[str]]: if self.commit_sha is None: return None @@ -630,8 +630,8 @@ def get_all_tf_targets_by_status( def get_all_build_targets_by_status( self, - statuses_to_filter_with: List[str], - ) -> Optional[Set[str]]: + statuses_to_filter_with: list[str], + ) -> Optional[set[str]]: if self.commit_sha is None or self.project.repo is None: return None diff --git a/packit_service/worker/events/github.py b/packit_service/worker/events/github.py index bae9d498c..a1d8ed5bf 100644 --- a/packit_service/worker/events/github.py +++ b/packit_service/worker/events/github.py @@ -1,7 +1,7 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT -from typing import Dict, Optional, Union, List, Set +from typing import Optional, Union from ogr.abstract import GitProject, Comment @@ -66,7 +66,7 @@ def commit_sha(self) -> Optional[str]: # type:ignore self._commit_sha = self.project.get_sha_from_tag(tag_name=self.tag_name) return self._commit_sha - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["commit_sha"] = self.commit_sha return result @@ -115,7 +115,7 @@ def __init__( self.identifier = str(pr_id) self.git_ref = None # pr_id will be used for checkout - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["action"] = result["action"].value return result @@ -159,7 +159,7 @@ def __init__( self.identifier = str(pr_id) self.git_ref = None # pr_id will be used for checkout - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["action"] = result["action"].value return result @@ -204,7 +204,7 @@ def __init__( self.target_repo = target_repo self.identifier = str(issue_id) - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["action"] = result["action"].value return result @@ -238,19 +238,19 @@ def __init__( self.job_identifier = job_identifier @property - def build_targets_override(self) -> Optional[Set[str]]: + def build_targets_override(self) -> Optional[set[str]]: if self.check_name_job in {"rpm-build", "production-build", "koji-build"}: return {self.check_name_target} return None @property - def tests_targets_override(self) -> Optional[Set[str]]: + def tests_targets_override(self) -> Optional[set[str]]: if self.check_name_job == "testing-farm": return {self.check_name_target} return None @property - def branches_override(self) -> Optional[Set[str]]: + def branches_override(self) -> Optional[set[str]]: if self.check_name_job == "propose-downstream": return {self.check_name_target} return None @@ -360,7 +360,7 @@ def __init__( account_url: str, account_type: str, created_at: Union[int, float, str], - repositories: List[str], + repositories: list[str], sender_id: int, sender_login: str, status: AllowlistStatus = AllowlistStatus.waiting, @@ -394,7 +394,7 @@ def from_event_dict(cls, event: dict): sender_login=event.get("sender_login"), ) - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["status"] = result["status"].value return result diff --git a/packit_service/worker/events/gitlab.py b/packit_service/worker/events/gitlab.py index fc27e98cf..1cfd7aaef 100644 --- a/packit_service/worker/events/gitlab.py +++ b/packit_service/worker/events/gitlab.py @@ -1,6 +1,6 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT -from typing import Dict, Optional +from typing import Optional from ogr.abstract import GitProject, Comment from packit_service.service.db_project_events import ( @@ -86,7 +86,7 @@ def __init__( self.description = description self.url = url - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["action"] = result["action"].value return result @@ -132,7 +132,7 @@ def __init__( self.actor = actor self.identifier = str(object_iid) - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["action"] = result["action"].value return result @@ -173,7 +173,7 @@ def __init__( self.action = action self.actor = actor - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["action"] = result["action"].value return result diff --git a/packit_service/worker/events/koji.py b/packit_service/worker/events/koji.py index 39d6dd0c2..fd2cc7db4 100644 --- a/packit_service/worker/events/koji.py +++ b/packit_service/worker/events/koji.py @@ -1,7 +1,7 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT import logging -from typing import Union, Optional, Dict +from typing import Union, Optional from ogr.abstract import GitProject from ogr.services.pagure import PagureProject @@ -29,7 +29,7 @@ class AbstractKojiEvent(AbstractResultEvent): def __init__( self, task_id: int, - rpm_build_task_ids: Optional[Dict[str, int]] = None, + rpm_build_task_ids: Optional[dict[str, int]] = None, start_time: Optional[Union[int, float, str]] = None, completion_time: Optional[Union[int, float, str]] = None, ): @@ -94,7 +94,7 @@ def get_koji_build_logs_url( def get_koji_build_rpm_tasks_logs_urls( self, koji_logs_url: str = "https://kojipkgs.fedoraproject.org", - ) -> Dict[str, str]: + ) -> dict[str, str]: """ Constructs the log URLs for all RPM subtasks of the Koji task. """ @@ -106,7 +106,7 @@ def get_koji_build_rpm_tasks_logs_urls( for arch, rpm_build_task_id in self.rpm_build_task_ids.items() } - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result.pop("_build_model") result.pop("_build_model_searched") @@ -132,7 +132,7 @@ def __init__( owner: str, web_url: Optional[str] = None, old_state: Optional[KojiBuildState] = None, - rpm_build_task_ids: Optional[Dict[str, int]] = None, + rpm_build_task_ids: Optional[dict[str, int]] = None, start_time: Optional[Union[int, float, str]] = None, completion_time: Optional[Union[int, float, str]] = None, ): @@ -192,7 +192,7 @@ def git_ref(self) -> str: def identifier(self) -> str: return self.branch_name - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["state"] = result["state"].value result["old_state"] = result["old_state"].value if self.old_state else None @@ -235,7 +235,7 @@ def __init__( task_id: int, state: KojiTaskState, old_state: Optional[KojiTaskState] = None, - rpm_build_task_ids: Optional[Dict[str, int]] = None, + rpm_build_task_ids: Optional[dict[str, int]] = None, start_time: Optional[Union[int, float, str]] = None, completion_time: Optional[Union[int, float, str]] = None, ): @@ -324,7 +324,7 @@ def get_base_project(self) -> Optional[GitProject]: return None # With Github app, we cannot work with fork repo return self.project - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["state"] = result["state"].value result["old_state"] = result["old_state"].value diff --git a/packit_service/worker/events/new_hotness.py b/packit_service/worker/events/new_hotness.py index 29be22c99..d3d725988 100644 --- a/packit_service/worker/events/new_hotness.py +++ b/packit_service/worker/events/new_hotness.py @@ -4,7 +4,7 @@ from abc import abstractmethod from functools import cached_property from logging import getLogger -from typing import Optional, Dict +from typing import Optional from ogr.abstract import GitProject from ogr.parsing import RepoUrl @@ -153,7 +153,7 @@ def tag_name(self): return self.packages_config.upstream_tag_template.format(version=self.version) - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: d = self.__dict__ d["project_url"] = self.project_url d["tag_name"] = self.tag_name diff --git a/packit_service/worker/events/pagure.py b/packit_service/worker/events/pagure.py index 3e5060fcd..8969a35d5 100644 --- a/packit_service/worker/events/pagure.py +++ b/packit_service/worker/events/pagure.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT from logging import getLogger -from typing import Dict, Optional +from typing import Optional from ogr.abstract import Comment, GitProject from ogr.parsing import RepoUrl @@ -108,7 +108,7 @@ def __init__( self._repo_url: Optional[RepoUrl] = None - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: d = self.__dict__ d["repo_name"] = self.repo_name d["repo_namespace"] = self.repo_namespace @@ -219,7 +219,7 @@ def __init__( self.git_ref = None # pr_id will be used for checkout self.project_url = project_url - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["action"] = result["action"].value return result diff --git a/packit_service/worker/events/testing_farm.py b/packit_service/worker/events/testing_farm.py index e59614e58..92e48239d 100644 --- a/packit_service/worker/events/testing_farm.py +++ b/packit_service/worker/events/testing_farm.py @@ -1,7 +1,7 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT from datetime import datetime -from typing import Optional, Dict +from typing import Optional from ogr.abstract import GitProject from ogr.services.pagure import PagureProject @@ -55,7 +55,7 @@ def pr_id(self) -> Optional[int]: self._pr_id = self.db_project_object.pr_id return self._pr_id - def get_dict(self, default_dict: Optional[Dict] = None) -> dict: + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["result"] = result["result"].value result["pr_id"] = self.pr_id diff --git a/packit_service/worker/handlers/abstract.py b/packit_service/worker/handlers/abstract.py index 9001fef2f..fcfe354b9 100644 --- a/packit_service/worker/handlers/abstract.py +++ b/packit_service/worker/handlers/abstract.py @@ -11,7 +11,7 @@ from datetime import datetime from os import getenv from pathlib import Path -from typing import Dict, Optional, Set, Type, Tuple +from typing import Optional from celery import Task from celery import signature @@ -39,15 +39,15 @@ logger = logging.getLogger(__name__) -MAP_JOB_TYPE_TO_HANDLER: Dict[JobType, Set[Type["JobHandler"]]] = defaultdict(set) -MAP_REQUIRED_JOB_TYPE_TO_HANDLER: Dict[JobType, Set[Type["JobHandler"]]] = defaultdict( +MAP_JOB_TYPE_TO_HANDLER: dict[JobType, set[type["JobHandler"]]] = defaultdict(set) +MAP_REQUIRED_JOB_TYPE_TO_HANDLER: dict[JobType, set[type["JobHandler"]]] = defaultdict( set, ) -SUPPORTED_EVENTS_FOR_HANDLER: Dict[Type["JobHandler"], Set[Type["Event"]]] = ( +SUPPORTED_EVENTS_FOR_HANDLER: dict[type["JobHandler"], set[type["Event"]]] = ( defaultdict(set) ) -MAP_COMMENT_TO_HANDLER: Dict[str, Set[Type["JobHandler"]]] = defaultdict(set) -MAP_CHECK_PREFIX_TO_HANDLER: Dict[str, Set[Type["JobHandler"]]] = defaultdict(set) +MAP_COMMENT_TO_HANDLER: dict[str, set[type["JobHandler"]]] = defaultdict(set) +MAP_CHECK_PREFIX_TO_HANDLER: dict[str, set[type["JobHandler"]]] = defaultdict(set) def configured_as(job_type: JobType): @@ -76,14 +76,14 @@ class CoprBuildHandler(JobHandler): ``` """ - def _add_to_mapping(kls: Type["JobHandler"]): + def _add_to_mapping(kls: type["JobHandler"]): MAP_JOB_TYPE_TO_HANDLER[job_type].add(kls) return kls return _add_to_mapping -def reacts_to(event: Type["Event"]): +def reacts_to(event: type["Event"]): """ [class decorator] Specify an event for which we want to use this handler. @@ -100,7 +100,7 @@ class CoprBuildHandler(JobHandler): ``` """ - def _add_to_mapping(kls: Type["JobHandler"]): + def _add_to_mapping(kls: type["JobHandler"]): SUPPORTED_EVENTS_FOR_HANDLER[kls].add(event) return kls @@ -129,7 +129,7 @@ class ProposeDownstreamHandler(JobHandler): ``` """ - def _add_to_mapping(kls: Type["JobHandler"]): + def _add_to_mapping(kls: type["JobHandler"]): MAP_COMMENT_TO_HANDLER[command].add(kls) return kls @@ -157,7 +157,7 @@ def run_for_check_rerun(prefix: str): ``` """ - def _add_to_mapping(kls: Type["JobHandler"]): + def _add_to_mapping(kls: type["JobHandler"]): MAP_CHECK_PREFIX_TO_HANDLER[prefix].add(kls) return kls @@ -252,7 +252,7 @@ def _clean_workplace(self): shutil.rmtree(item) @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return () @classmethod @@ -336,7 +336,7 @@ def run_job(self): self.job_config.type.value if self.job_config else self.task_name.value ) logger.debug(f"Running handler {str(self)} for {job_type}") - job_results: Dict[str, TaskResults] = {} + job_results: dict[str, TaskResults] = {} current_time = datetime.now().strftime(DATETIME_FORMAT) result_key = f"{job_type}-{current_time}" job_results[result_key] = self.run_n_clean() diff --git a/packit_service/worker/handlers/bodhi.py b/packit_service/worker/handlers/bodhi.py index 3a666731f..b17eec1be 100644 --- a/packit_service/worker/handlers/bodhi.py +++ b/packit_service/worker/handlers/bodhi.py @@ -8,7 +8,7 @@ import logging from datetime import datetime from os import getenv -from typing import Tuple, Type, Optional +from typing import Optional from celery import Task @@ -308,7 +308,7 @@ class CreateBodhiUpdateHandler( task_name = TaskName.bodhi_update @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: """We react only on finished builds (=KojiBuildState.complete) and configured branches. """ @@ -369,7 +369,7 @@ class BodhiUpdateFromSidetagHandler( task_name = TaskName.bodhi_update_from_sidetag @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: """We react only on finished builds (=KojiBuildState.complete) and configured branches. """ @@ -399,7 +399,7 @@ class RetriggerBodhiUpdateHandler( task_name = TaskName.retrigger_bodhi_update @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: """We react only on finished builds (=KojiBuildState.complete) and configured branches. """ @@ -434,7 +434,7 @@ class IssueCommentRetriggerBodhiUpdateHandler( task_name = TaskName.issue_comment_retrigger_bodhi_update @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: """We react only on finished builds (=KojiBuildState.complete) and configured branches. """ diff --git a/packit_service/worker/handlers/copr.py b/packit_service/worker/handlers/copr.py index 0c4942b65..663745e8c 100644 --- a/packit_service/worker/handlers/copr.py +++ b/packit_service/worker/handlers/copr.py @@ -3,7 +3,7 @@ import logging from datetime import datetime, timezone -from typing import Tuple, Type, Optional +from typing import Optional from celery import signature, Task @@ -119,7 +119,7 @@ def __init__( self._copr_build_group_id = copr_build_group_id @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return ( IsJobConfigTriggerMatching, IsGitForgeProjectAndEventOk, @@ -137,7 +137,7 @@ class AbstractCoprBuildReportHandler( GetCoprBuildEventMixin, ): @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return (AreOwnerAndProjectMatchingJob, IsPackageMatchingJobView) @@ -149,7 +149,7 @@ class CoprBuildStartHandler(AbstractCoprBuildReportHandler): task_name = TaskName.copr_build_start @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return super(CoprBuildStartHandler, CoprBuildStartHandler).get_checkers() + ( BuildNotAlreadyStarted, ) diff --git a/packit_service/worker/handlers/distgit.py b/packit_service/worker/handlers/distgit.py index b3818a816..e39f98c31 100644 --- a/packit_service/worker/handlers/distgit.py +++ b/packit_service/worker/handlers/distgit.py @@ -11,7 +11,7 @@ from datetime import datetime from functools import partial from os import getenv -from typing import Dict, Optional, Set, Tuple, Type, List, ClassVar +from typing import Optional, ClassVar from celery import Task @@ -175,7 +175,7 @@ def __init__( ) @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return (IsProjectOk,) @property @@ -605,7 +605,7 @@ def __init__( ) @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return (IsUpstreamTagMatchingConfig,) def _report_errors_for_each_branch(self, message: str) -> None: @@ -673,7 +673,7 @@ def __init__( self._project_required = False @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return (ValidInformationForPullFromUpstream, IsUpstreamTagMatchingConfig) @staticmethod @@ -687,7 +687,7 @@ def get_handler_specific_task_accepted_message( f"{DistgitAnnouncement.get_comment_footer_with_announcement_if_present()}" ) - def get_resolved_bugs(self) -> List[str]: + def get_resolved_bugs(self) -> list[str]: """ If we are reacting to New Hotness, return the corresponding bugzilla ID only. In case of comment, take the argument from comment. The format in the comment @@ -781,7 +781,7 @@ def koji_helper(self): return self._koji_helper @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return ( LabelsOnDistgitPR, PermissionOnDistgit, @@ -812,7 +812,7 @@ def _get_or_create_koji_group_model(self) -> KojiBuildGroupModel: return group @abc.abstractmethod - def get_branches(self) -> List[str]: + def get_branches(self) -> list[str]: """Get a list of branch (names) to be built in koji""" def is_already_triggered(self, branch: str) -> bool: @@ -999,7 +999,7 @@ def __init__( koji_group_model_id=koji_group_model_id, ) - def get_branches(self) -> List[str]: + def get_branches(self) -> list[str]: branch = ( self.project.get_pr(self.data.pr_id).target_branch if self.data.event_type in (PullRequestCommentPagureEvent.__name__,) @@ -1078,7 +1078,7 @@ def __init__( koji_group_model_id=koji_group_model_id, ) - def get_branches(self) -> List[str]: + def get_branches(self) -> list[str]: return self.branches def get_trigger_type_description(self) -> str: @@ -1100,7 +1100,7 @@ class TagIntoSidetagHandler( task_name = TaskName.tag_into_sidetag @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return (PermissionOnDistgit,) def run_for_branch(self, package: str, sidetag_group: str, branch: str) -> None: @@ -1117,7 +1117,7 @@ def run(self) -> TaskResults: self.service_config.comment_command_prefix, ) args = commands[1:] if len(commands) > 1 else "" - packages_to_tag: Dict[str, Dict[str, Set[str]]] = defaultdict( + packages_to_tag: dict[str, dict[str, set[str]]] = defaultdict( partial(defaultdict, set), ) for job in self.package_config.get_job_views(): diff --git a/packit_service/worker/handlers/forges.py b/packit_service/worker/handlers/forges.py index 6c988eb0f..84fe46d4d 100644 --- a/packit_service/worker/handlers/forges.py +++ b/packit_service/worker/handlers/forges.py @@ -6,7 +6,6 @@ TODO: The build and test handlers are independent and should be moved away. """ import logging -from typing import Tuple, Type from packit.config import ( JobConfig, @@ -177,7 +176,7 @@ def __init__( self.comment = self.data.event_dict.get("comment") @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return (IsIssueInNotificationRepoChecker,) def run(self) -> TaskResults: diff --git a/packit_service/worker/handlers/koji.py b/packit_service/worker/handlers/koji.py index 7203e11af..50624d8fd 100644 --- a/packit_service/worker/handlers/koji.py +++ b/packit_service/worker/handlers/koji.py @@ -8,7 +8,7 @@ import logging from os import getenv from datetime import datetime -from typing import Optional, Tuple, Type +from typing import Optional from celery import signature @@ -118,7 +118,7 @@ def __init__( self._project: Optional[GitProject] = None @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return ( IsJobConfigTriggerMatching, PermissionOnKoji, @@ -401,7 +401,7 @@ class KojiBuildTagHandler( task_name = TaskName.koji_build_tag @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return (SidetagExists,) def run(self) -> TaskResults: diff --git a/packit_service/worker/handlers/mixin.py b/packit_service/worker/handlers/mixin.py index 903345d3d..dcd42cbf3 100644 --- a/packit_service/worker/handlers/mixin.py +++ b/packit_service/worker/handlers/mixin.py @@ -3,7 +3,8 @@ import logging from abc import abstractmethod -from typing import Any, Optional, Protocol, Iterator, Union +from typing import Any, Optional, Protocol, Union +from collections.abc import Iterator from dataclasses import dataclass from packit.exceptions import PackitException from packit.config import PackageConfig, JobConfig diff --git a/packit_service/worker/handlers/testing_farm.py b/packit_service/worker/handlers/testing_farm.py index f57390403..2a892cb69 100644 --- a/packit_service/worker/handlers/testing_farm.py +++ b/packit_service/worker/handlers/testing_farm.py @@ -6,7 +6,7 @@ """ import logging from datetime import datetime, timezone -from typing import Optional, Dict, List, Tuple, Type +from typing import Optional from celery import Task @@ -121,7 +121,7 @@ def __init__( self._testing_farm_job_helper: Optional[TestingFarmJobHelper] = None @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return ( IsJobConfigTriggerMatching, IsEventOk, @@ -133,8 +133,8 @@ def get_checkers() -> Tuple[Type[Checker], ...]: def _get_or_create_group( self, - builds: Dict[str, CoprBuildTargetModel], - ) -> Tuple[TFTTestRunGroupModel, List[TFTTestRunTargetModel]]: + builds: dict[str, CoprBuildTargetModel], + ) -> tuple[TFTTestRunGroupModel, list[TFTTestRunTargetModel]]: """Creates a TFTTestRunGroup. If a group is already attached to this handler, it returns the @@ -188,7 +188,7 @@ def _get_or_create_group( return group, runs - def run_with_copr_builds(self, targets: List[str], failed: Dict): + def run_with_copr_builds(self, targets: list[str], failed: dict): targets_without_successful_builds = set() targets_with_builds = {} @@ -271,7 +271,7 @@ def run_with_copr_builds(self, targets: List[str], failed: Dict): def run_for_target( self, test_run: "TFTTestRunTargetModel", - failed: Dict, + failed: dict, build: Optional[CoprBuildTargetModel] = None, ): if self.celery_task.retries == 0: @@ -302,7 +302,7 @@ def run(self) -> TaskResults: details={"msg": msg}, ) - failed: Dict[str, str] = {} + failed: dict[str, str] = {} if self.testing_farm_job_helper.skip_build: group, test_runs = self._get_or_create_group( @@ -361,7 +361,7 @@ def __init__( self.created = event.get("created") @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return (IsEventForJob,) @property diff --git a/packit_service/worker/handlers/usage.py b/packit_service/worker/handlers/usage.py index ae0ca1d23..57ec026ef 100644 --- a/packit_service/worker/handlers/usage.py +++ b/packit_service/worker/handlers/usage.py @@ -1,14 +1,12 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT -from typing import Set - from ogr.abstract import PRStatus from packit_service.config import ServiceConfig from packit_service.models import GitProjectModel -def check_onboarded_projects(projects: Set[GitProjectModel]): +def check_onboarded_projects(projects: set[GitProjectModel]): """For every given project check if it has a merged Packit PR. If yes it is onboarded: save the flag in the git projects table. diff --git a/packit_service/worker/handlers/vm_image.py b/packit_service/worker/handlers/vm_image.py index 2a7502bb2..e92d1248a 100644 --- a/packit_service/worker/handlers/vm_image.py +++ b/packit_service/worker/handlers/vm_image.py @@ -6,7 +6,6 @@ """ import logging -from typing import Tuple, Type from packit.config import ( JobType, @@ -59,7 +58,7 @@ class VMImageBuildHandler( task_name = TaskName.vm_image_build @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return ( HasAuthorWriteAccess, # [NOTE] We require Copr repository being present for the VM image @@ -129,7 +128,7 @@ class VMImageBuildResultHandler( task_name = TaskName.vm_image_build_result @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return () def run(self) -> TaskResults: diff --git a/packit_service/worker/helpers/job_helper.py b/packit_service/worker/helpers/job_helper.py index 0d66ce8e4..e67b97753 100644 --- a/packit_service/worker/helpers/job_helper.py +++ b/packit_service/worker/helpers/job_helper.py @@ -3,7 +3,7 @@ import logging from functools import partial -from typing import Optional, Union, Dict, Callable +from typing import Optional, Union, Callable from lazy_object_proxy import Proxy from ogr.abstract import GitProject, PullRequest @@ -198,7 +198,7 @@ def _report( url: str = "", check_names: Union[str, list, None] = None, markdown_content: str = None, - links_to_external_services: Optional[Dict[str, str]] = None, + links_to_external_services: Optional[dict[str, str]] = None, update_feedback_time: Callable = None, ) -> None: """ @@ -238,7 +238,7 @@ def report_status_to_configured_job( state: BaseCommitStatus, url: str = "", markdown_content: str = None, - links_to_external_services: Optional[Dict[str, str]] = None, + links_to_external_services: Optional[dict[str, str]] = None, update_feedback_time: Callable = None, ): """ diff --git a/packit_service/worker/helpers/sidetag.py b/packit_service/worker/helpers/sidetag.py index 8b3eb81c5..27f0652c9 100644 --- a/packit_service/worker/helpers/sidetag.py +++ b/packit_service/worker/helpers/sidetag.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT import logging -from typing import Any, Optional, Set +from typing import Any, Optional from packit.exceptions import PackitException from packit.utils.koji_helper import KojiHelper @@ -29,17 +29,17 @@ def dist_git_branch(self) -> str: def koji_name(self) -> str: return self.sidetag.koji_name - def get_builds(self) -> Set[NEVR]: + def get_builds(self) -> set[NEVR]: builds = self.koji_helper.get_builds_in_tag(self.koji_name) return {NEVR.from_string(b["nvr"]) for b in builds} - def get_packages(self) -> Set[str]: + def get_packages(self) -> set[str]: return {b.name for b in self.get_builds()} - def get_missing_dependencies(self, dependencies: Set[str]) -> Set[str]: + def get_missing_dependencies(self, dependencies: set[str]) -> set[str]: return dependencies - self.get_packages() - def get_builds_suitable_for_update(self, dependencies: Set[str]) -> Set[NEVR]: + def get_builds_suitable_for_update(self, dependencies: set[str]) -> set[NEVR]: builds = self.get_builds() result = set() for package in dependencies: diff --git a/packit_service/worker/helpers/sync_release/propose_downstream.py b/packit_service/worker/helpers/sync_release/propose_downstream.py index e4b7bcb93..dffec9d2e 100644 --- a/packit_service/worker/helpers/sync_release/propose_downstream.py +++ b/packit_service/worker/helpers/sync_release/propose_downstream.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT import logging -from typing import Optional, List, Set, Dict, Callable +from typing import Optional, Callable from ogr.abstract import GitProject @@ -28,7 +28,7 @@ def __init__( metadata: EventData, db_project_event: ProjectEventModel, job_config: JobConfig, - branches_override: Optional[Set[str]] = None, + branches_override: Optional[set[str]] = None, ): super().__init__( service_config=service_config, @@ -91,7 +91,7 @@ def msg_retrigger(self) -> str: return "" @property - def check_names(self) -> List[str]: + def check_names(self) -> list[str]: """ List of full names of the commit statuses for propose-downstream job. @@ -107,7 +107,7 @@ def report_status_to_all( state: BaseCommitStatus, url: str = "", markdown_content: str = None, - links_to_external_services: Optional[Dict[str, str]] = None, + links_to_external_services: Optional[dict[str, str]] = None, update_feedback_time: Callable = None, ) -> None: if self.job_type: @@ -127,7 +127,7 @@ def report_status_to_configured_job( state: BaseCommitStatus, url: str = "", markdown_content: str = None, - links_to_external_services: Optional[Dict[str, str]] = None, + links_to_external_services: Optional[dict[str, str]] = None, update_feedback_time: Callable = None, ): self.report_status_to_all( diff --git a/packit_service/worker/helpers/sync_release/pull_from_upstream.py b/packit_service/worker/helpers/sync_release/pull_from_upstream.py index 3d8d069fd..ab2b5ee62 100644 --- a/packit_service/worker/helpers/sync_release/pull_from_upstream.py +++ b/packit_service/worker/helpers/sync_release/pull_from_upstream.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT import logging -from typing import Optional, Set +from typing import Optional from ogr.abstract import GitProject @@ -28,7 +28,7 @@ def __init__( metadata: EventData, db_project_event: ProjectEventModel, job_config: JobConfig, - branches_override: Optional[Set[str]] = None, + branches_override: Optional[set[str]] = None, ): super().__init__( service_config=service_config, diff --git a/packit_service/worker/helpers/sync_release/sync_release.py b/packit_service/worker/helpers/sync_release/sync_release.py index 40d59d228..decc04546 100644 --- a/packit_service/worker/helpers/sync_release/sync_release.py +++ b/packit_service/worker/helpers/sync_release/sync_release.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT import logging -from typing import Optional, List, Set +from typing import Optional from ogr.abstract import GitProject @@ -29,7 +29,7 @@ def __init__( metadata: EventData, db_project_event: ProjectEventModel, job_config: JobConfig, - branches_override: Optional[Set[str]] = None, + branches_override: Optional[set[str]] = None, ): super().__init__( service_config=service_config, @@ -40,7 +40,7 @@ def __init__( job_config=job_config, ) self.branches_override = branches_override - self._check_names: Optional[List[str]] = None + self._check_names: Optional[list[str]] = None self._default_dg_branch: Optional[str] = None self._job: Optional[JobConfig] = None @@ -51,7 +51,7 @@ def default_dg_branch(self) -> str: """ raise NotImplementedError("Use subclass.") - def _filter_override_branches(self, branches: Set[str]) -> Set[str]: + def _filter_override_branches(self, branches: set[str]) -> set[str]: """ If a branch has been overriden filter it out. If we re-run the job in a subset of branches @@ -64,7 +64,7 @@ def _filter_override_branches(self, branches: Set[str]) -> Set[str]: return branches @property - def branches(self) -> Set[str]: + def branches(self) -> set[str]: """ Return all valid branches from config. """ @@ -75,7 +75,7 @@ def branches(self) -> Set[str]: ) return self._filter_override_branches(branches) - def get_fast_forward_merge_branches_for(self, source_branch: str) -> Set[str]: + def get_fast_forward_merge_branches_for(self, source_branch: str) -> set[str]: """ Returns a list of branches that can be fast forwarded merging the specified source_branch. They are listed in the config. diff --git a/packit_service/worker/helpers/testing_farm.py b/packit_service/worker/helpers/testing_farm.py index 3886216e1..f1055d41e 100644 --- a/packit_service/worker/helpers/testing_farm.py +++ b/packit_service/worker/helpers/testing_farm.py @@ -5,7 +5,7 @@ import re from re import Pattern import shlex -from typing import Dict, Any, Optional, Set, List, Union, Tuple, Callable +from typing import Any, Optional, Union, Callable import requests @@ -65,9 +65,9 @@ def __init__(self, command_prefix: str, comment: str): self._parser: argparse.ArgumentParser = None self.packit_command: str = None self.identifier: str = None - self.labels: List[str] = None + self.labels: list[str] = None self.pr_argument: str = None - self.envs: Dict[str, str] = None + self.envs: dict[str, str] = None if comment is None: return @@ -139,7 +139,7 @@ def parse_known_arguments(self, args: argparse.Namespace) -> None: ) continue - def parse_unknown_arguments(self, unknown_args: List[str]) -> None: + def parse_unknown_arguments(self, unknown_args: list[str]) -> None: # Process unknown_args to find pr_argument pr_argument_pattern = re.compile(r"^[^/\s]+/[^#\s]+#\d+$") for arg in unknown_args: @@ -160,8 +160,8 @@ def __init__( metadata: EventData, db_project_event: ProjectEventModel, job_config: JobConfig, - build_targets_override: Optional[Set[str]] = None, - tests_targets_override: Optional[Set[str]] = None, + build_targets_override: Optional[set[str]] = None, + tests_targets_override: Optional[set[str]] = None, celery_task: Optional[CeleryTask] = None, ): super().__init__( @@ -182,10 +182,10 @@ def __init__( self._tft_api_url: str = "" self._tft_token: str = "" self.__pr = None - self._copr_builds_from_other_pr: Optional[Dict[str, CoprBuildTargetModel]] = ( + self._copr_builds_from_other_pr: Optional[dict[str, CoprBuildTargetModel]] = ( None ) - self._test_check_names: Optional[List[str]] = None + self._test_check_names: Optional[list[str]] = None self._comment_arguments: Optional[CommentArguments] = None @property @@ -365,7 +365,7 @@ def build_required(self) -> bool: @property def copr_builds_from_other_pr( self, - ) -> Optional[Dict[str, CoprBuildTargetModel]]: + ) -> Optional[dict[str, CoprBuildTargetModel]]: """ Dictionary containing copr build target model for each chroot if the testing farm was triggered by a comment with PR argument @@ -379,7 +379,7 @@ def copr_builds_from_other_pr( return self._copr_builds_from_other_pr @property - def available_composes(self) -> Optional[Set[str]]: + def available_composes(self) -> Optional[set[str]]: """ Fetches available composes from the Testing Farm endpoint. @@ -401,9 +401,9 @@ def available_composes(self) -> Optional[Set[str]]: def _artifact( chroot: str, build_id: Optional[int], - built_packages: Optional[List[Dict]], - ) -> Dict[str, Union[List[str], str]]: - artifact: Dict[str, Union[List[str], str]] = { + built_packages: Optional[list[dict]], + ) -> dict[str, Union[list[str], str]]: + artifact: dict[str, Union[list[str], str]] = { "id": f"{build_id}:{chroot}", "type": "fedora-copr-build", } @@ -414,7 +414,7 @@ def _artifact( return artifact @staticmethod - def _payload_without_token(payload: Dict) -> Dict: + def _payload_without_token(payload: dict) -> dict: """Return a copy of the payload with token/api_key removed.""" payload_ = payload.copy() payload_.pop("api_key") @@ -488,7 +488,7 @@ def _payload( self, target: str, compose: str, - artifacts: Optional[List[Dict[str, Union[List[str], str]]]] = None, + artifacts: Optional[list[dict[str, Union[list[str], str]]]] = None, build: Optional["CoprBuildTargetModel"] = None, additional_build: Optional["CoprBuildTargetModel"] = None, ) -> dict: @@ -590,7 +590,7 @@ def _payload( else: predefined_environment.pop(k, None) - environment: Dict[str, Any] = { + environment: dict[str, Any] = { "arch": arch, "os": {"compose": compose}, "tmt": { @@ -715,7 +715,7 @@ def is_fmf_configured(self) -> bool: return False @staticmethod - def is_compose_matching(compose_to_check: str, composes: Set[Pattern]) -> bool: + def is_compose_matching(compose_to_check: str, composes: set[Pattern]) -> bool: """ Check whether the compose matches any compose in the list of re-compiled composes. @@ -882,7 +882,7 @@ def _get_artifacts( chroot: str, build: CoprBuildTargetModel, additional_build: Optional[CoprBuildTargetModel], - ) -> List[Dict]: + ) -> list[dict]: """ Get the artifacts list from the build (if the skip_build option is not defined) and additional build (from other PR) if present. @@ -1108,7 +1108,7 @@ def get_raw_request( ) @classmethod - def get_request_details(cls, request_id: str) -> Dict[str, Any]: + def get_request_details(cls, request_id: str) -> dict[str, Any]: """Testing Farm sends only request/pipeline id in a notification. We need to get more details ourselves.""" self = cls( @@ -1252,7 +1252,7 @@ def _retry_on_submit_failure( def get_copr_builds_from_other_pr( self, - ) -> Optional[Dict[str, CoprBuildTargetModel]]: + ) -> Optional[dict[str, CoprBuildTargetModel]]: """ Get additional Copr builds if there was a PR argument in the test comment command: @@ -1302,7 +1302,7 @@ def get_copr_builds_from_other_pr( successful_most_recent_builds, ) - def _parse_comment_pr_argument(self) -> Optional[Tuple[str, str, str]]: + def _parse_comment_pr_argument(self) -> Optional[tuple[str, str, str]]: """ Parse the PR argument from test comment command if there is any. @@ -1342,7 +1342,7 @@ def _parse_comment_pr_argument(self) -> Optional[Tuple[str, str, str]]: def _construct_copr_builds_from_other_pr_dict( self, successful_most_recent_builds, - ) -> Optional[Dict[str, CoprBuildTargetModel]]: + ) -> Optional[dict[str, CoprBuildTargetModel]]: """ Construct a dictionary that will contain for each build target name a build target model from the given models if there is one @@ -1354,7 +1354,7 @@ def _construct_copr_builds_from_other_pr_dict( Returns: dict """ - result: Dict[str, CoprBuildTargetModel] = {} + result: dict[str, CoprBuildTargetModel] = {} for build_target in self.build_targets_for_tests: additional_build = [ @@ -1369,14 +1369,14 @@ def _construct_copr_builds_from_other_pr_dict( return result @property - def configured_tests_targets(self) -> Set[str]: + def configured_tests_targets(self) -> set[str]: """ Return the configured targets for the job. """ return self.configured_targets_for_tests_job(self.job_config) @property - def tests_targets(self) -> Set[str]: + def tests_targets(self) -> set[str]: """ Return valid test targets (mapped) to test in for the job (considering the overrides). @@ -1393,7 +1393,7 @@ def get_test_check(self, chroot: str = None) -> str: ) @property - def test_check_names(self) -> List[str]: + def test_check_names(self) -> list[str]: """ List of full names of the commit statuses. @@ -1413,7 +1413,7 @@ def test_target2build_target(self, test_target: str) -> str: return self.test_target2build_target_for_test_job(test_target, self.job_config) @property - def build_targets_for_tests(self) -> Set[str]: + def build_targets_for_tests(self) -> set[str]: """ Return valid targets/chroots to build in needed to run the job. (considering the overrides). @@ -1427,7 +1427,7 @@ def report_status_to_tests_for_chroot( url: str = "", chroot: str = "", markdown_content: str = None, - links_to_external_services: Optional[Dict[str, str]] = None, + links_to_external_services: Optional[dict[str, str]] = None, update_feedback_time: Callable = None, ) -> None: if chroot in self.build_targets_for_tests: @@ -1453,7 +1453,7 @@ def report_status_to_tests_for_test_target( url: str = "", target: str = "", markdown_content: str = None, - links_to_external_services: Optional[Dict[str, str]] = None, + links_to_external_services: Optional[dict[str, str]] = None, update_feedback_time: Callable = None, ) -> None: if target in self.tests_targets: @@ -1473,7 +1473,7 @@ def report_status_to_tests( state, url: str = "", markdown_content: str = None, - links_to_external_services: Optional[Dict[str, str]] = None, + links_to_external_services: Optional[dict[str, str]] = None, update_feedback_time: Callable = None, ) -> None: self._report( @@ -1492,7 +1492,7 @@ def report_status_to_configured_job( state: BaseCommitStatus, url: str = "", markdown_content: str = None, - links_to_external_services: Optional[Dict[str, str]] = None, + links_to_external_services: Optional[dict[str, str]] = None, update_feedback_time: Callable = None, ): if self.job_config.manual_trigger and self.build_required(): diff --git a/packit_service/worker/jobs.py b/packit_service/worker/jobs.py index a598d0fc5..06dd9edb7 100644 --- a/packit_service/worker/jobs.py +++ b/packit_service/worker/jobs.py @@ -8,7 +8,6 @@ from datetime import datetime from functools import cached_property from re import match -from typing import List, Set, Type, Tuple from typing import Optional, Union, Callable import celery @@ -97,7 +96,7 @@ def get_handlers_for_comment( comment: str, packit_comment_command_prefix: str, -) -> Set[Type[JobHandler]]: +) -> set[type[JobHandler]]: """ Get handlers for the given command respecting packit_comment_command_prefix. @@ -118,7 +117,7 @@ def get_handlers_for_comment( return handlers -def get_handlers_for_check_rerun(check_name_job: str) -> Set[Type[JobHandler]]: +def get_handlers_for_check_rerun(check_name_job: str) -> set[type[JobHandler]]: """ Get handlers for the given check name. @@ -156,7 +155,7 @@ def process_message( event: dict, source: Optional[str] = None, event_type: Optional[str] = None, - ) -> List[TaskResults]: + ) -> list[TaskResults]: """ Entrypoint for message processing. @@ -190,7 +189,7 @@ def process_message( return cls(event_object).process() - def process(self) -> List[TaskResults]: + def process(self) -> list[TaskResults]: """ Processes the event object attribute of SteveJobs - runs the checks for the given event and creates tasks that match the event, @@ -259,7 +258,7 @@ def process(self) -> List[TaskResults]: def initialize_job_helper( self, - handler_kls: Type[JobHandler], + handler_kls: type[JobHandler], job_config: JobConfig, ) -> Union[ProposeDownstreamJobHelper, BaseBuildJobHelper]: """ @@ -291,7 +290,7 @@ def initialize_job_helper( params["branches_override"] = self.event.branches_override return propose_downstream_helper(**params) - helper_kls: Type[ + helper_kls: type[ Union[TestingFarmJobHelper, CoprBuildJobHelper, KojiBuildJobHelper] ] @@ -312,7 +311,7 @@ def initialize_job_helper( def report_task_accepted( self, - handler_kls: Type[JobHandler], + handler_kls: type[JobHandler], job_config: JobConfig, update_feedback_time: Callable, ) -> None: @@ -360,7 +359,7 @@ def report_task_accepted( self.push_copr_metrics(handler_kls, number_of_build_targets) - def search_distgit_config_in_issue(self) -> Optional[Tuple[str, PackageConfig]]: + def search_distgit_config_in_issue(self) -> Optional[tuple[str, PackageConfig]]: """Get a tuple (dist-git repo url, package config loaded from dist-git yaml file). Look up for a dist-git repo url inside the issue description for the issue comment event. @@ -433,7 +432,7 @@ def is_packit_config_present(self) -> bool: return True - def process_jobs(self) -> List[TaskResults]: + def process_jobs(self) -> list[TaskResults]: """ Create Celery tasks for a job handler (if trigger matches) for every job defined in config. @@ -474,9 +473,9 @@ def process_jobs(self) -> List[TaskResults]: return [] allowlist = Allowlist(service_config=self.service_config) - processing_results: List[TaskResults] = [] + processing_results: list[TaskResults] = [] - statuses_check_feedback: List[datetime] = [] + statuses_check_feedback: list[datetime] = [] for handler_kls in handler_classes: # TODO: merge to to get_handlers_for_event so # so we don't need to go through the similar process twice. @@ -510,10 +509,10 @@ def process_jobs(self) -> List[TaskResults]: def create_tasks( self, - job_configs: List[JobConfig], - handler_kls: Type[JobHandler], + job_configs: list[JobConfig], + handler_kls: type[JobHandler], statuses_check_feedback: list[datetime], - ) -> List[TaskResults]: + ) -> list[TaskResults]: """ Create handler tasks for handler and job configs. @@ -521,7 +520,7 @@ def create_tasks( job_configs: Matching job configs. handler_kls: Handler class that will be used. """ - processing_results: List[TaskResults] = [] + processing_results: list[TaskResults] = [] signatures = [] # we want to run handlers for all possible jobs, not just the first one for job_config in job_configs: @@ -565,7 +564,7 @@ def create_tasks( def should_task_be_created_for_job_config_and_handler( self, job_config: JobConfig, - handler_kls: Type[JobHandler], + handler_kls: type[JobHandler], ) -> bool: """ Check whether a new task should be created for job config and handler. @@ -652,7 +651,7 @@ def is_project_public_or_enabled_private(self) -> bool: return True - def check_explicit_matching(self) -> List[JobConfig]: + def check_explicit_matching(self) -> list[JobConfig]: """Force explicit event/jobs matching for triggers Returns: @@ -667,7 +666,7 @@ def compare_jobs_without_triggers(a, b): bd.pop("trigger") return ad == bd - matching_jobs: List[JobConfig] = [] + matching_jobs: list[JobConfig] = [] if isinstance(self.event, PullRequestCommentPagureEvent): for job in self.event.packages_config.get_job_views(): if ( @@ -732,7 +731,7 @@ def compare_jobs_without_triggers(a, b): return matching_jobs - def get_jobs_matching_event(self) -> List[JobConfig]: + def get_jobs_matching_event(self) -> list[JobConfig]: """ Get list of non-duplicated all jobs that matches with event's trigger. @@ -773,7 +772,7 @@ def get_jobs_matching_event(self) -> List[JobConfig]: return jobs_matching_trigger - def get_handlers_for_comment_and_rerun_event(self) -> Set[Type[JobHandler]]: + def get_handlers_for_comment_and_rerun_event(self) -> set[type[JobHandler]]: """ Get all handlers that can be triggered by comment (e.g. `/packit build`) or check rerun. @@ -805,7 +804,7 @@ def get_handlers_for_comment_and_rerun_event(self) -> Set[Type[JobHandler]]: return handlers_triggered_by_job - def get_handlers_for_event(self) -> Set[Type[JobHandler]]: + def get_handlers_for_event(self) -> set[type[JobHandler]]: """ Get all handlers that we need to run for the given event. @@ -824,7 +823,7 @@ def get_handlers_for_event(self) -> Set[Type[JobHandler]]: handlers_triggered_by_job = self.get_handlers_for_comment_and_rerun_event() - matching_handlers: Set[Type["JobHandler"]] = set() + matching_handlers: set[type["JobHandler"]] = set() for job in jobs_matching_trigger: for handler in ( MAP_JOB_TYPE_TO_HANDLER[job.type] @@ -847,8 +846,8 @@ def get_handlers_for_event(self) -> Set[Type[JobHandler]]: def is_handler_matching_the_event( self, - handler: Type[JobHandler], - allowed_handlers: Set[Type[JobHandler]], + handler: type[JobHandler], + allowed_handlers: set[type[JobHandler]], ) -> bool: """ Decides whether handler matches to comment or check rerun job and given event @@ -873,8 +872,8 @@ def is_handler_matching_the_event( def get_config_for_handler_kls( self, - handler_kls: Type[JobHandler], - ) -> List[JobConfig]: + handler_kls: type[JobHandler], + ) -> list[JobConfig]: """ Get a list of JobConfigs relevant to event and the handler class. @@ -895,9 +894,9 @@ def get_config_for_handler_kls( List of JobConfigs relevant to the given handler and event preserving the order in the config. """ - jobs_matching_trigger: List[JobConfig] = self.get_jobs_matching_event() + jobs_matching_trigger: list[JobConfig] = self.get_jobs_matching_event() - matching_jobs: List[JobConfig] = [] + matching_jobs: list[JobConfig] = [] for job in jobs_matching_trigger: if handler_kls in MAP_JOB_TYPE_TO_HANDLER[job.type]: matching_jobs.append(job) @@ -922,7 +921,7 @@ def get_config_for_handler_kls( def push_statuses_metrics( self, - statuses_check_feedback: List[datetime], + statuses_check_feedback: list[datetime], ) -> None: """ Push the metrics about the time of setting initial statuses for the first and last check. @@ -968,7 +967,7 @@ def push_statuses_metrics( def push_copr_metrics( self, - handler_kls: Type[JobHandler], + handler_kls: type[JobHandler], built_targets: int = 0, ) -> None: """ @@ -1005,7 +1004,7 @@ def is_fas_verification_comment(self, comment: str) -> bool: def report_task_accepted_for_downstream_retrigger_comments( self, - handler_kls: Type[JobHandler], + handler_kls: type[JobHandler], ): """ For dist-git PR comment events/ issue comment events in issue_repository, diff --git a/packit_service/worker/mixin.py b/packit_service/worker/mixin.py index 63b6d5338..e5dfc0a34 100644 --- a/packit_service/worker/mixin.py +++ b/packit_service/worker/mixin.py @@ -5,7 +5,7 @@ import logging import re from pathlib import Path -from typing import Optional, Protocol, Union, List +from typing import Optional, Protocol, Union from fasjson_client import Client from fasjson_client.errors import APIError @@ -304,12 +304,12 @@ def issue(self): class GetBranches(Protocol): @property @abstractmethod - def branches(self) -> List[str]: ... + def branches(self) -> list[str]: ... class GetBranchesFromIssueMixin(Config, GetBranches): @property - def branches(self) -> List[str]: + def branches(self) -> list[str]: """Get branches names from an issue comment like the following: diff --git a/packit_service/worker/parser.py b/packit_service/worker/parser.py index ce6376b6e..cf359b6e4 100644 --- a/packit_service/worker/parser.py +++ b/packit_service/worker/parser.py @@ -7,7 +7,7 @@ import logging from datetime import datetime, timezone from os import getenv -from typing import Optional, Type, Union, Dict, Any, Tuple +from typing import Optional, Union, Any from ogr.parsing import parse_git_repo from packit.config import JobConfigTriggerType @@ -831,7 +831,7 @@ def parse_merge_request_comment_event( def parse_check_name( check_name: str, db_project_event: ProjectEventModel, - ) -> Optional[Tuple[str, str, str]]: + ) -> Optional[tuple[str, str, str]]: """ Parse the given name of the check run. @@ -1145,8 +1145,8 @@ def parse_pagure_push_event(event) -> Optional[PushPagureEvent]: @staticmethod def parse_data_from_testing_farm( tft_test_run: TFTTestRunTargetModel, - event: Dict[Any, Any], - ) -> Tuple[ + event: dict[Any, Any], + ) -> tuple[ str, str, TestingFarmResult, @@ -1309,7 +1309,7 @@ def parse_copr_event(event) -> Optional[AbstractCoprBuildEvent]: """this corresponds to copr build event e.g:""" topic = event.get("topic") - copr_build_cls: Type["AbstractCoprBuildEvent"] + copr_build_cls: type["AbstractCoprBuildEvent"] if topic == "org.fedoraproject.prod.copr.build.start": copr_build_cls = CoprBuildStartEvent elif topic == "org.fedoraproject.prod.copr.build.end": diff --git a/packit_service/worker/reporting/enums.py b/packit_service/worker/reporting/enums.py index 322684006..e563d5d92 100644 --- a/packit_service/worker/reporting/enums.py +++ b/packit_service/worker/reporting/enums.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT from enum import Enum, auto -from typing import Dict, Union +from typing import Union from ogr.abstract import CommitStatus from ogr.services.github.check_run import ( @@ -31,7 +31,7 @@ class BaseCommitStatus(Enum): error = "error" -MAP_TO_COMMIT_STATUS: Dict[BaseCommitStatus, CommitStatus] = { +MAP_TO_COMMIT_STATUS: dict[BaseCommitStatus, CommitStatus] = { BaseCommitStatus.pending: CommitStatus.pending, BaseCommitStatus.running: CommitStatus.running, BaseCommitStatus.failure: CommitStatus.failure, @@ -40,7 +40,7 @@ class BaseCommitStatus(Enum): BaseCommitStatus.error: CommitStatus.error, } -MAP_TO_CHECK_RUN: Dict[ +MAP_TO_CHECK_RUN: dict[ BaseCommitStatus, Union[GithubCheckRunResult, GithubCheckRunStatus], ] = { diff --git a/packit_service/worker/reporting/reporters/base.py b/packit_service/worker/reporting/reporters/base.py index c57940dc3..711768de9 100644 --- a/packit_service/worker/reporting/reporters/base.py +++ b/packit_service/worker/reporting/reporters/base.py @@ -3,7 +3,7 @@ import logging from datetime import datetime, timezone -from typing import Optional, Union, Dict, Callable +from typing import Optional, Union, Callable from packit_service.worker.reporting.enums import ( BaseCommitStatus, @@ -100,7 +100,7 @@ def set_status( description: str, check_name: str, url: str = "", - links_to_external_services: Optional[Dict[str, str]] = None, + links_to_external_services: Optional[dict[str, str]] = None, markdown_content: str = None, ): raise NotImplementedError() @@ -110,7 +110,7 @@ def report( state: BaseCommitStatus, description: str, url: str = "", - links_to_external_services: Optional[Dict[str, str]] = None, + links_to_external_services: Optional[dict[str, str]] = None, check_names: Union[str, list, None] = None, markdown_content: str = None, update_feedback_time: Callable = None, diff --git a/packit_service/worker/reporting/reporters/github.py b/packit_service/worker/reporting/reporters/github.py index 06fea43d4..54458e576 100644 --- a/packit_service/worker/reporting/reporters/github.py +++ b/packit_service/worker/reporting/reporters/github.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT import logging -from typing import Optional, Dict +from typing import Optional from .base import StatusReporter from packit_service.worker.reporting.news import News @@ -36,7 +36,7 @@ def set_status( description: str, check_name: str, url: str = "", - links_to_external_services: Optional[Dict[str, str]] = None, + links_to_external_services: Optional[dict[str, str]] = None, markdown_content: str = None, ): state_to_set = self.get_commit_status(state) @@ -70,7 +70,7 @@ class StatusReporterGithubChecks(StatusReporterGithubStatuses): @staticmethod def _create_table( url: str, - links_to_external_services: Optional[Dict[str, str]], + links_to_external_services: Optional[dict[str, str]], ) -> str: table_content = [] if url: @@ -100,7 +100,7 @@ def set_status( description: str, check_name: str, url: str = "", - links_to_external_services: Optional[Dict[str, str]] = None, + links_to_external_services: Optional[dict[str, str]] = None, markdown_content: str = None, ): markdown_content = markdown_content or "" diff --git a/packit_service/worker/reporting/reporters/gitlab.py b/packit_service/worker/reporting/reporters/gitlab.py index 96385bc2c..847c97c73 100644 --- a/packit_service/worker/reporting/reporters/gitlab.py +++ b/packit_service/worker/reporting/reporters/gitlab.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT import logging -from typing import Optional, Dict +from typing import Optional from .base import StatusReporter from packit_service.worker.reporting.enums import BaseCommitStatus @@ -28,7 +28,7 @@ def set_status( description: str, check_name: str, url: str = "", - links_to_external_services: Optional[Dict[str, str]] = None, + links_to_external_services: Optional[dict[str, str]] = None, markdown_content: str = None, ): state_to_set = self.get_commit_status(state) diff --git a/packit_service/worker/reporting/reporters/pagure.py b/packit_service/worker/reporting/reporters/pagure.py index d2339cc6b..64294a856 100644 --- a/packit_service/worker/reporting/reporters/pagure.py +++ b/packit_service/worker/reporting/reporters/pagure.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: MIT import logging -from typing import Optional, Dict +from typing import Optional from .base import StatusReporter from packit_service.worker.reporting.enums import BaseCommitStatus @@ -28,7 +28,7 @@ def set_status( description: str, check_name: str, url: str = "", - links_to_external_services: Optional[Dict[str, str]] = None, + links_to_external_services: Optional[dict[str, str]] = None, markdown_content: str = None, ): state_to_set = self.get_commit_status(state) diff --git a/packit_service/worker/result.py b/packit_service/worker/result.py index 07567f44b..dfcaced6b 100644 --- a/packit_service/worker/result.py +++ b/packit_service/worker/result.py @@ -1,7 +1,7 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT -from typing import Any, Dict +from typing import Any from packit.config import JobConfig @@ -15,7 +15,7 @@ class TaskResults(dict): Inherit from dict to be JSON serializable. """ - def __init__(self, success: bool, details: Dict[str, Any] = None): + def __init__(self, success: bool, details: dict[str, Any] = None): """ Args: success: Represents the resulting state of the job handler. diff --git a/packit_service/worker/tasks.py b/packit_service/worker/tasks.py index 8f5ef7a90..be57b2f70 100644 --- a/packit_service/worker/tasks.py +++ b/packit_service/worker/tasks.py @@ -5,7 +5,7 @@ import socket from datetime import timedelta from os import getenv -from typing import List, Optional +from typing import Optional from celery import Task from celery._state import get_current_task @@ -187,7 +187,7 @@ def process_message( event: dict, source: Optional[str] = None, event_type: Optional[str] = None, -) -> List[TaskResults]: +) -> list[TaskResults]: """ Main celery task for processing messages. diff --git a/ruff.toml b/ruff.toml index 91728d202..e53246ac9 100644 --- a/ruff.toml +++ b/ruff.toml @@ -11,7 +11,7 @@ select = [ # "RET", # flake8-return # "RUF", # Ruff-specific rules # "SIM", # flake8-simplify - # "UP", # pyupgrade + "UP", # pyupgrade # "W", # pycodestyle Warning ] ignore = [ diff --git a/tests/integration/test_pr_comment.py b/tests/integration/test_pr_comment.py index 14d41818d..09bee5b96 100644 --- a/tests/integration/test_pr_comment.py +++ b/tests/integration/test_pr_comment.py @@ -3,7 +3,6 @@ import json import shutil -from typing import List import pytest from celery.canvas import group as celery_group @@ -205,7 +204,7 @@ def mock_pr_comment_functionality(request): flexmock(Allowlist, check_and_report=True) -def one_job_finished_with_msg(results: List[TaskResults], msg: str): +def one_job_finished_with_msg(results: list[TaskResults], msg: str): for value in results: assert value["success"] if value["details"]["msg"] == msg: diff --git a/tests/spellbook.py b/tests/spellbook.py index 8933d7210..4b11dee03 100644 --- a/tests/spellbook.py +++ b/tests/spellbook.py @@ -7,7 +7,7 @@ import json from datetime import datetime, timezone from pathlib import Path -from typing import Any, List, Tuple +from typing import Any from packit_service.worker.result import TaskResults TESTS_DIR = Path(__file__).parent @@ -20,8 +20,8 @@ def first_dict_value(a_dict: dict) -> Any: def get_parameters_from_results( - results: List[TaskResults], -) -> Tuple[dict, str, dict, dict]: + results: list[TaskResults], +) -> tuple[dict, str, dict, dict]: assert len(results) == 1 event_dict = results[0]["details"]["event"] diff --git a/tests/unit/test_allowlist.py b/tests/unit/test_allowlist.py index 19d7dd455..2cb567ab2 100644 --- a/tests/unit/test_allowlist.py +++ b/tests/unit/test_allowlist.py @@ -1,7 +1,7 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT -from typing import Tuple, Iterable +from collections.abc import Iterable import pytest from copr.v3 import Client @@ -455,7 +455,7 @@ def test_check_and_report_denied_project(allowlist, event): @pytest.fixture() -def events(request) -> Iterable[Tuple[AbstractGithubEvent, bool, Iterable[str]]]: +def events(request) -> Iterable[tuple[AbstractGithubEvent, bool, Iterable[str]]]: """ :param request: event type to create Event instances of that type :return: list of Events that check_and_report accepts together with whether they should pass @@ -598,7 +598,7 @@ def test_check_and_report( add_pull_request_event_with_empty_sha, allowlist: Allowlist, allowlist_entries, - events: Iterable[Tuple[AbstractGithubEvent, bool, Iterable[str]]], + events: Iterable[tuple[AbstractGithubEvent, bool, Iterable[str]]], ): """ :param allowlist: fixture diff --git a/tests/unit/test_copr_build.py b/tests/unit/test_copr_build.py index c52efb929..6f366967d 100644 --- a/tests/unit/test_copr_build.py +++ b/tests/unit/test_copr_build.py @@ -3,7 +3,7 @@ import json from datetime import datetime, timezone -from typing import Optional, Type +from typing import Optional import pytest from celery import Celery @@ -104,7 +104,7 @@ def build_helper( jobs=None, db_project_event=None, selected_job=None, - project_type: Type[GitProject] = GithubProject, + project_type: type[GitProject] = GithubProject, build_targets_override=None, task: Optional[CeleryTask] = None, copr_build_group_id: Optional[int] = None, diff --git a/tests/unit/test_jobs.py b/tests/unit/test_jobs.py index 650fbe5ba..2463aba7c 100644 --- a/tests/unit/test_jobs.py +++ b/tests/unit/test_jobs.py @@ -1,8 +1,6 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT -from typing import Type - import copy import celery import pytest @@ -2525,7 +2523,7 @@ def packages_config(self): ], ) def test_get_config_for_handler_kls( - handler_kls: Type[JobHandler], + handler_kls: type[JobHandler], event_cls, db_project_object, jobs, @@ -2681,7 +2679,7 @@ def __init__(self): ), ], ) -def test_handler_matches_to_job(event_kls, handler: Type[JobHandler], allowed_handlers): +def test_handler_matches_to_job(event_kls, handler: type[JobHandler], allowed_handlers): class Event(event_kls): # type: ignore def __init__(self): pass @@ -2707,7 +2705,7 @@ def __init__(self): ) def test_handler_doesnt_match_to_job( event_kls, - handler: Type[JobHandler], + handler: type[JobHandler], allowed_handlers, ): class Event(event_kls): # type: ignore diff --git a/tests/unit/test_testing_farm.py b/tests/unit/test_testing_farm.py index 0daddc9be..9c3ddd927 100644 --- a/tests/unit/test_testing_farm.py +++ b/tests/unit/test_testing_farm.py @@ -2,7 +2,6 @@ # SPDX-License-Identifier: MIT import re from datetime import datetime, timezone -from typing import List, Dict import pytest from flexmock import flexmock @@ -2122,9 +2121,9 @@ def test_is_supported_architecture(target, use_internal_tf, supported): def test_parse_comment_arguments( comment: str, expected_identifier: str, - expected_labels: List[str], + expected_labels: list[str], expected_pr_arg: str, - expected_envs: Dict[str, str], + expected_envs: dict[str, str], ): job_config = JobConfig( trigger=JobConfigTriggerType.pull_request, From 93a6ad41516b0506a9b288b286b6bd545e4241f5 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Tue, 22 Oct 2024 14:02:02 +0200 Subject: [PATCH 06/13] ci(ruff): enable isort Signed-off-by: Matej Focko --- alembic/env.py | 10 +- ...85fa213_add_anityamultipleversionsmodel.py | 2 +- ...a2d8_srpmbuildmodel_copr_related_fields.py | 6 +- ...c90fcab3e1_add_srpm_link_to_copr_builds.py | 2 +- .../242a0cdb6d23_create_oshscanmodel.py | 2 +- .../versions/258490f6e667_initial_schema.py | 2 +- ...89d27a_add_task_accepted_time_field_to_.py | 2 +- ...dd_packages_config_to_projecteventmodel.py | 2 +- ...f5_store_target_in_koji_build_tag_event.py | 2 +- ...a4c43ae47_add_success_to_srpmbuildmodel.py | 2 +- ...add_onboarded_check_in_gitprojectmodel_.py | 2 +- alembic/versions/320c791746f0_more_indexes.py | 2 +- alembic/versions/376bdebc4180_update_enums.py | 1 - ...a397e3adac_add_built_packages_field_to_.py | 2 +- ...15ae_add_skipped_status_report_to_sync_.py | 1 - alembic/versions/4292b00185bf_whitelist.py | 2 +- .../versions/469bdb9ca350_drop_bugzilla.py | 2 +- ...40cb19_add_koji_build_scratch_attribute.py | 8 +- .../482dc393678a_save_identifier_in_tf_run.py | 2 +- ..._add_sidetag_groups_and_sidetags_tables.py | 2 +- ..._add_project_authentication_issue_model.py | 2 +- ...7c5409325_pipelines_refactoring_indexes.py | 1 - ...eda4b_added_project_name_and_git_fields.py | 2 +- ...4a51b961c28_bodhi_updates_from_sidetags.py | 2 +- .../68ce6a306b30_add_koji_build_groups.py | 18 ++-- .../6c9e1df74fa0_save_propose_downstream.py | 2 +- ...ba80_add_explicit_mapping_of_tf_to_copr.py | 18 ++-- .../70dcb6140e11_store_build_datetime.py | 2 +- ..._link_srpmbuildmodel_to_jobtriggermodel.py | 21 +++-- .../versions/7a43773ac926_add_bugzillas.py | 2 +- ...4fa_add_sync_release_pull_request_table.py | 6 +- ...23c9_allow_multiple_forges_in_allowlist.py | 4 +- ...691c2_add_source_git_pr_and_dist_git_pr.py | 2 +- ...a13238bfa4_add_models_for_bodhi_updates.py | 2 +- ...02_drop_merge_duplicate_gitlab_projects.py | 3 +- ...9841c3f8ba8_adjust_kojibuildtargetmodel.py | 2 +- .../9fe0e970880f_add_copr_build_groups.py | 18 ++-- ...400be4_store_submit_time_of_srpm_builds.py | 3 +- ...c282_add_times_for_bodhi_update_targets.py | 8 +- alembic/versions/a5c06aa9ef30_add_runmodel.py | 6 +- .../a619bd414ff0_add_build_status_enum.py | 1 - .../a9c49475e9c7_add_testing_farm_groups.py | 18 ++-- .../ab4c11acf5e1_fix_tf_add_canceled_state.py | 1 - .../adbdc1c21d7e_drop_task_results_table.py | 3 +- ...19025_move_commit_sha_to_project_events.py | 2 +- alembic/versions/c6250555a36c_.py | 8 +- ...4d_add_a_table_for_github_installations.py | 3 +- ..._add_tables_for_triggers_koji_and_tests.py | 7 +- ...7ff1c6_add_package_name_to_the_pipeline.py | 2 +- ...c1beda6749e_add_tables_for_task_results.py | 3 +- .../e05e1b04de87_add_koji_build_tags.py | 2 +- ..._added_instance_url_field_to_gitproject.py | 8 +- .../e907a93de3ef_add_vm_image_builds_table.py | 2 +- ...bb806c3d4_add_project_url_to_gitproject.py | 3 +- ...ull_from_upstream_releated_adjustements.py | 3 +- .../fd785af95c19_add_anitya_related_models.py | 2 +- files/scripts/allowlist.py | 2 +- files/scripts/db-cleanup.py | 9 +- packit_service/__init__.py | 2 +- packit_service/config.py | 8 +- packit_service/constants.py | 2 +- packit_service/models.py | 26 ++++-- packit_service/schema.py | 2 +- packit_service/service/api/__init__.py | 14 +-- packit_service/service/api/bodhi_updates.py | 4 +- packit_service/service/api/copr_builds.py | 4 +- packit_service/service/api/koji_builds.py | 2 +- packit_service/service/api/parsers.py | 1 - .../service/api/propose_downstream.py | 6 +- .../service/api/pull_from_upstream.py | 8 +- packit_service/service/api/runs.py | 12 +-- packit_service/service/api/srpm_builds.py | 2 +- packit_service/service/api/system.py | 10 +- packit_service/service/api/testing_farm.py | 2 +- packit_service/service/api/usage.py | 25 +++-- packit_service/service/api/utils.py | 14 +-- packit_service/service/app.py | 2 +- packit_service/service/db_project_events.py | 3 +- packit_service/service/tasks.py | 5 +- packit_service/utils.py | 2 +- packit_service/worker/allowlist.py | 18 ++-- packit_service/worker/celery_task.py | 3 +- packit_service/worker/checker/bodhi.py | 16 ++-- packit_service/worker/checker/copr.py | 2 +- packit_service/worker/checker/distgit.py | 9 +- packit_service/worker/checker/helper.py | 2 +- .../worker/checker/open_scan_hub.py | 3 +- packit_service/worker/checker/testing_farm.py | 4 +- packit_service/worker/checker/vm_image.py | 10 +- packit_service/worker/database.py | 8 +- packit_service/worker/events/__init__.py | 42 ++++----- packit_service/worker/events/comment.py | 3 +- packit_service/worker/events/copr.py | 5 +- packit_service/worker/events/event.py | 5 +- packit_service/worker/events/github.py | 14 +-- packit_service/worker/events/gitlab.py | 5 +- packit_service/worker/events/koji.py | 11 ++- packit_service/worker/events/new_hotness.py | 6 +- packit_service/worker/events/open_scan_hub.py | 11 ++- packit_service/worker/events/pagure.py | 6 +- packit_service/worker/events/testing_farm.py | 5 +- packit_service/worker/events/vm_image.py | 6 +- packit_service/worker/handlers/__init__.py | 12 +-- packit_service/worker/handlers/abstract.py | 12 +-- packit_service/worker/handlers/bodhi.py | 26 +++--- packit_service/worker/handlers/copr.py | 26 +++--- packit_service/worker/handlers/distgit.py | 63 +++++++------ packit_service/worker/handlers/forges.py | 12 ++- packit_service/worker/handlers/koji.py | 30 +++--- packit_service/worker/handlers/mixin.py | 20 ++-- .../worker/handlers/open_scan_hub.py | 26 +++--- .../worker/handlers/testing_farm.py | 28 +++--- packit_service/worker/handlers/usage.py | 1 + packit_service/worker/handlers/vm_image.py | 30 +++--- packit_service/worker/helpers/job_helper.py | 11 ++- .../worker/helpers/open_scan_hub.py | 25 ++--- packit_service/worker/helpers/sidetag.py | 3 +- .../sync_release/propose_downstream.py | 4 +- .../sync_release/pull_from_upstream.py | 4 +- .../helpers/sync_release/sync_release.py | 9 +- packit_service/worker/helpers/testing_farm.py | 32 +++---- packit_service/worker/jobs.py | 28 +++--- packit_service/worker/mixin.py | 19 ++-- packit_service/worker/monitoring.py | 2 +- packit_service/worker/parser.py | 48 +++++----- .../worker/reporting/reporters/base.py | 16 ++-- .../worker/reporting/reporters/github.py | 11 ++- .../worker/reporting/reporters/gitlab.py | 7 +- .../worker/reporting/reporters/pagure.py | 5 +- packit_service/worker/reporting/utils.py | 3 +- packit_service/worker/result.py | 2 +- packit_service/worker/tasks.py | 43 +++++---- ruff.toml | 2 +- tests/conftest.py | 16 ++-- tests/integration/test_babysit.py | 22 ++--- tests/integration/test_bodhi_update.py | 23 +++-- tests/integration/test_check_rerun.py | 9 +- tests/integration/test_database.py | 2 +- tests/integration/test_dg_commit.py | 10 +- .../test_github_fas_verification.py | 6 +- tests/integration/test_handler.py | 16 ++-- tests/integration/test_installation.py | 4 +- tests/integration/test_issue_comment.py | 25 +++-- tests/integration/test_koji_build.py | 6 +- tests/integration/test_listen_to_fedmsg.py | 29 +++--- tests/integration/test_new_hotness_update.py | 20 ++-- tests/integration/test_pr_comment.py | 47 +++++----- tests/integration/test_release_event.py | 10 +- tests/integration/test_vm_image_build.py | 26 +++--- tests/spellbook.py | 1 + tests/unit/conftest.py | 6 +- tests/unit/events/conftest.py | 1 - tests/unit/events/test_anitya.py | 5 +- tests/unit/events/test_copr.py | 5 +- tests/unit/events/test_github.py | 4 +- tests/unit/events/test_gitlab.py | 2 +- tests/unit/events/test_koji.py | 4 +- tests/unit/events/test_open_scan_hub.py | 30 +++--- tests/unit/events/test_pagure.py | 3 +- tests/unit/events/test_testing_farm.py | 6 +- tests/unit/test_allowlist.py | 14 +-- tests/unit/test_babysit_vm_image.py | 11 +-- tests/unit/test_bodhi_update_checks.py | 15 ++- tests/unit/test_bodhi_update_error_msgs.py | 4 +- tests/unit/test_build_helper.py | 6 +- tests/unit/test_checkers.py | 20 ++-- tests/unit/test_config.py | 8 +- tests/unit/test_copr_build.py | 23 +++-- tests/unit/test_distgit.py | 6 +- tests/unit/test_handler_mixin.py | 5 +- tests/unit/test_handler_vm_image.py | 15 ++- tests/unit/test_jobs.py | 23 +++-- tests/unit/test_koji_build.py | 22 ++--- tests/unit/test_mixin.py | 17 ++-- tests/unit/test_models.py | 2 +- tests/unit/test_monitoring.py | 2 +- tests/unit/test_open_scan_hub.py | 66 ++++++------- tests/unit/test_propose_downstream.py | 4 +- tests/unit/test_reporting.py | 12 +-- tests/unit/test_scan.py | 92 ------------------- tests/unit/test_srpm_logs.py | 6 +- tests/unit/test_status_names.py | 2 +- tests/unit/test_steve.py | 10 +- tests/unit/test_tasks.py | 2 +- tests/unit/test_testing_farm.py | 22 +++-- tests/unit/test_views.py | 2 +- tests_openshift/conftest.py | 48 +++++----- tests_openshift/database/test_allowlist.py | 2 +- tests_openshift/database/test_events.py | 28 +++--- tests_openshift/database/test_models.py | 39 ++++---- tests_openshift/database/test_tasks.py | 16 ++-- tests_openshift/openshift_integration/base.py | 12 ++- .../openshift_integration/test_copr.py | 2 +- .../openshift_integration/test_pkgtool.py | 21 +++-- tests_openshift/service/test_api.py | 2 +- 195 files changed, 1013 insertions(+), 1075 deletions(-) delete mode 100644 tests/unit/test_scan.py diff --git a/alembic/env.py b/alembic/env.py index 826773f83..155111a42 100644 --- a/alembic/env.py +++ b/alembic/env.py @@ -1,14 +1,10 @@ from logging.config import fileConfig - -from alembic import context -from sqlalchemy import engine_from_config -from sqlalchemy import pool - from typing import TYPE_CHECKING -from packit_service.models import Base -from packit_service.models import get_pg_url +from sqlalchemy import engine_from_config, pool +from alembic import context +from packit_service.models import Base, get_pg_url # this is the Alembic Config object, which provides # access to the values within the .ini file in use. diff --git a/alembic/versions/002ab85fa213_add_anityamultipleversionsmodel.py b/alembic/versions/002ab85fa213_add_anityamultipleversionsmodel.py index d151faae4..053001818 100644 --- a/alembic/versions/002ab85fa213_add_anityamultipleversionsmodel.py +++ b/alembic/versions/002ab85fa213_add_anityamultipleversionsmodel.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "002ab85fa213" diff --git a/alembic/versions/0ad4d1c2a2d8_srpmbuildmodel_copr_related_fields.py b/alembic/versions/0ad4d1c2a2d8_srpmbuildmodel_copr_related_fields.py index 0c7673118..f74aeea01 100644 --- a/alembic/versions/0ad4d1c2a2d8_srpmbuildmodel_copr_related_fields.py +++ b/alembic/versions/0ad4d1c2a2d8_srpmbuildmodel_copr_related_fields.py @@ -9,18 +9,16 @@ import enum from datetime import datetime from typing import TYPE_CHECKING -from packit_service.models import ProjectAndEventsConnector import sqlalchemy as sa -from alembic import op from sqlalchemy import ( + JSON, Boolean, Column, DateTime, Enum, ForeignKey, Integer, - JSON, String, Text, orm, @@ -28,6 +26,8 @@ from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship +from alembic import op +from packit_service.models import ProjectAndEventsConnector if TYPE_CHECKING: Base = object diff --git a/alembic/versions/1bc90fcab3e1_add_srpm_link_to_copr_builds.py b/alembic/versions/1bc90fcab3e1_add_srpm_link_to_copr_builds.py index 2a7f62e31..2a95189c7 100644 --- a/alembic/versions/1bc90fcab3e1_add_srpm_link_to_copr_builds.py +++ b/alembic/versions/1bc90fcab3e1_add_srpm_link_to_copr_builds.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "1bc90fcab3e1" diff --git a/alembic/versions/242a0cdb6d23_create_oshscanmodel.py b/alembic/versions/242a0cdb6d23_create_oshscanmodel.py index 004f58b5d..3ee0b1b6e 100644 --- a/alembic/versions/242a0cdb6d23_create_oshscanmodel.py +++ b/alembic/versions/242a0cdb6d23_create_oshscanmodel.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "242a0cdb6d23" diff --git a/alembic/versions/258490f6e667_initial_schema.py b/alembic/versions/258490f6e667_initial_schema.py index 94c1af527..fd8d8b173 100644 --- a/alembic/versions/258490f6e667_initial_schema.py +++ b/alembic/versions/258490f6e667_initial_schema.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "258490f6e667" diff --git a/alembic/versions/28beb389d27a_add_task_accepted_time_field_to_.py b/alembic/versions/28beb389d27a_add_task_accepted_time_field_to_.py index 357cf79c5..3a2542fc8 100644 --- a/alembic/versions/28beb389d27a_add_task_accepted_time_field_to_.py +++ b/alembic/versions/28beb389d27a_add_task_accepted_time_field_to_.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "28beb389d27a" diff --git a/alembic/versions/2ad985cecd79_add_packages_config_to_projecteventmodel.py b/alembic/versions/2ad985cecd79_add_packages_config_to_projecteventmodel.py index ca1e6a933..04794005e 100644 --- a/alembic/versions/2ad985cecd79_add_packages_config_to_projecteventmodel.py +++ b/alembic/versions/2ad985cecd79_add_packages_config_to_projecteventmodel.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "2ad985cecd79" diff --git a/alembic/versions/2fdbdcd581f5_store_target_in_koji_build_tag_event.py b/alembic/versions/2fdbdcd581f5_store_target_in_koji_build_tag_event.py index 4dff61cc6..f2e0c9738 100644 --- a/alembic/versions/2fdbdcd581f5_store_target_in_koji_build_tag_event.py +++ b/alembic/versions/2fdbdcd581f5_store_target_in_koji_build_tag_event.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "2fdbdcd581f5" diff --git a/alembic/versions/307a4c43ae47_add_success_to_srpmbuildmodel.py b/alembic/versions/307a4c43ae47_add_success_to_srpmbuildmodel.py index f38c10099..463662a45 100644 --- a/alembic/versions/307a4c43ae47_add_success_to_srpmbuildmodel.py +++ b/alembic/versions/307a4c43ae47_add_success_to_srpmbuildmodel.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "307a4c43ae47" diff --git a/alembic/versions/31111f804dec_add_onboarded_check_in_gitprojectmodel_.py b/alembic/versions/31111f804dec_add_onboarded_check_in_gitprojectmodel_.py index ca6f88270..22517c14d 100644 --- a/alembic/versions/31111f804dec_add_onboarded_check_in_gitprojectmodel_.py +++ b/alembic/versions/31111f804dec_add_onboarded_check_in_gitprojectmodel_.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "31111f804dec" diff --git a/alembic/versions/320c791746f0_more_indexes.py b/alembic/versions/320c791746f0_more_indexes.py index f5a6c0325..e06730a84 100644 --- a/alembic/versions/320c791746f0_more_indexes.py +++ b/alembic/versions/320c791746f0_more_indexes.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "320c791746f0" diff --git a/alembic/versions/376bdebc4180_update_enums.py b/alembic/versions/376bdebc4180_update_enums.py index 1b35cbafd..1b4db49e8 100644 --- a/alembic/versions/376bdebc4180_update_enums.py +++ b/alembic/versions/376bdebc4180_update_enums.py @@ -8,7 +8,6 @@ from alembic import op - # revision identifiers, used by Alembic. revision = "376bdebc4180" down_revision = "3aa397e3adac" diff --git a/alembic/versions/3aa397e3adac_add_built_packages_field_to_.py b/alembic/versions/3aa397e3adac_add_built_packages_field_to_.py index 6b2a28a0d..fad4b6648 100644 --- a/alembic/versions/3aa397e3adac_add_built_packages_field_to_.py +++ b/alembic/versions/3aa397e3adac_add_built_packages_field_to_.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "3aa397e3adac" diff --git a/alembic/versions/3de8647515ae_add_skipped_status_report_to_sync_.py b/alembic/versions/3de8647515ae_add_skipped_status_report_to_sync_.py index c4e7f82d7..cc6eea70b 100644 --- a/alembic/versions/3de8647515ae_add_skipped_status_report_to_sync_.py +++ b/alembic/versions/3de8647515ae_add_skipped_status_report_to_sync_.py @@ -8,7 +8,6 @@ from alembic import op - # revision identifiers, used by Alembic. revision = "3de8647515ae" down_revision = "99841c3f8ba8" diff --git a/alembic/versions/4292b00185bf_whitelist.py b/alembic/versions/4292b00185bf_whitelist.py index 6b3ad0151..86bb2dab7 100644 --- a/alembic/versions/4292b00185bf_whitelist.py +++ b/alembic/versions/4292b00185bf_whitelist.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "4292b00185bf" diff --git a/alembic/versions/469bdb9ca350_drop_bugzilla.py b/alembic/versions/469bdb9ca350_drop_bugzilla.py index 57a9ded23..ce11e4dc9 100644 --- a/alembic/versions/469bdb9ca350_drop_bugzilla.py +++ b/alembic/versions/469bdb9ca350_drop_bugzilla.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "469bdb9ca350" diff --git a/alembic/versions/46b37040cb19_add_koji_build_scratch_attribute.py b/alembic/versions/46b37040cb19_add_koji_build_scratch_attribute.py index e1b265d0d..6bd3b887f 100644 --- a/alembic/versions/46b37040cb19_add_koji_build_scratch_attribute.py +++ b/alembic/versions/46b37040cb19_add_koji_build_scratch_attribute.py @@ -6,15 +6,15 @@ """ -from typing import TYPE_CHECKING from datetime import datetime +from typing import TYPE_CHECKING -from alembic import op import sqlalchemy as sa -from sqlalchemy import Column, String, DateTime, Integer, JSON, Boolean, ForeignKey -from sqlalchemy.orm import relationship +from sqlalchemy import JSON, Boolean, Column, DateTime, ForeignKey, Integer, String from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship +from alembic import op from packit_service.models import ProjectAndEventsConnector # revision identifiers, used by Alembic. diff --git a/alembic/versions/482dc393678a_save_identifier_in_tf_run.py b/alembic/versions/482dc393678a_save_identifier_in_tf_run.py index 775484d62..e29ac0bc4 100644 --- a/alembic/versions/482dc393678a_save_identifier_in_tf_run.py +++ b/alembic/versions/482dc393678a_save_identifier_in_tf_run.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "482dc393678a" diff --git a/alembic/versions/487a77980f7e_add_sidetag_groups_and_sidetags_tables.py b/alembic/versions/487a77980f7e_add_sidetag_groups_and_sidetags_tables.py index 0a8ac0d3d..1ee0a251d 100644 --- a/alembic/versions/487a77980f7e_add_sidetag_groups_and_sidetags_tables.py +++ b/alembic/versions/487a77980f7e_add_sidetag_groups_and_sidetags_tables.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "487a77980f7e" diff --git a/alembic/versions/521433a1fdb0_add_project_authentication_issue_model.py b/alembic/versions/521433a1fdb0_add_project_authentication_issue_model.py index cb26a99ec..17e625cdf 100644 --- a/alembic/versions/521433a1fdb0_add_project_authentication_issue_model.py +++ b/alembic/versions/521433a1fdb0_add_project_authentication_issue_model.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "521433a1fdb0" diff --git a/alembic/versions/5b57c5409325_pipelines_refactoring_indexes.py b/alembic/versions/5b57c5409325_pipelines_refactoring_indexes.py index a0e521d9e..56d0eed1d 100644 --- a/alembic/versions/5b57c5409325_pipelines_refactoring_indexes.py +++ b/alembic/versions/5b57c5409325_pipelines_refactoring_indexes.py @@ -8,7 +8,6 @@ from alembic import op - # revision identifiers, used by Alembic. revision = "5b57c5409325" down_revision = "68ce6a306b30" diff --git a/alembic/versions/61d0f32eda4b_added_project_name_and_git_fields.py b/alembic/versions/61d0f32eda4b_added_project_name_and_git_fields.py index d93249d38..a0b102c80 100644 --- a/alembic/versions/61d0f32eda4b_added_project_name_and_git_fields.py +++ b/alembic/versions/61d0f32eda4b_added_project_name_and_git_fields.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "61d0f32eda4b" diff --git a/alembic/versions/64a51b961c28_bodhi_updates_from_sidetags.py b/alembic/versions/64a51b961c28_bodhi_updates_from_sidetags.py index 62e2f80f0..107cb3f84 100644 --- a/alembic/versions/64a51b961c28_bodhi_updates_from_sidetags.py +++ b/alembic/versions/64a51b961c28_bodhi_updates_from_sidetags.py @@ -7,9 +7,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "64a51b961c28" diff --git a/alembic/versions/68ce6a306b30_add_koji_build_groups.py b/alembic/versions/68ce6a306b30_add_koji_build_groups.py index bd9aef9a1..d34e7ef7b 100644 --- a/alembic/versions/68ce6a306b30_add_koji_build_groups.py +++ b/alembic/versions/68ce6a306b30_add_koji_build_groups.py @@ -12,25 +12,25 @@ from datetime import datetime from typing import TYPE_CHECKING -from packit_service.models import ProjectAndEventsConnector - -from alembic import op import sqlalchemy as sa import sqlalchemy.orm from sqlalchemy import ( + JSON, + Boolean, Column, - Integer, - String, DateTime, Enum, - Table, ForeignKey, - JSON, + Integer, + String, + Table, Text, - Boolean, ) -from sqlalchemy.orm import relationship from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship + +from alembic import op +from packit_service.models import ProjectAndEventsConnector if TYPE_CHECKING: Base = object diff --git a/alembic/versions/6c9e1df74fa0_save_propose_downstream.py b/alembic/versions/6c9e1df74fa0_save_propose_downstream.py index 2c1113a98..b0fc6edf9 100644 --- a/alembic/versions/6c9e1df74fa0_save_propose_downstream.py +++ b/alembic/versions/6c9e1df74fa0_save_propose_downstream.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "6c9e1df74fa0" diff --git a/alembic/versions/70c369f7ba80_add_explicit_mapping_of_tf_to_copr.py b/alembic/versions/70c369f7ba80_add_explicit_mapping_of_tf_to_copr.py index 24edef3c1..d21b2fd62 100644 --- a/alembic/versions/70c369f7ba80_add_explicit_mapping_of_tf_to_copr.py +++ b/alembic/versions/70c369f7ba80_add_explicit_mapping_of_tf_to_copr.py @@ -10,25 +10,25 @@ from datetime import datetime from typing import TYPE_CHECKING -from packit_service.models import ProjectAndEventsConnector - -from alembic import op import sqlalchemy as sa import sqlalchemy.orm from sqlalchemy import ( + JSON, + Boolean, Column, - Integer, - String, DateTime, Enum, - Table, ForeignKey, - JSON, + Integer, + String, + Table, Text, - Boolean, ) -from sqlalchemy.orm import relationship from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship + +from alembic import op +from packit_service.models import ProjectAndEventsConnector if TYPE_CHECKING: Base = object diff --git a/alembic/versions/70dcb6140e11_store_build_datetime.py b/alembic/versions/70dcb6140e11_store_build_datetime.py index f750804ab..31f7d3b81 100644 --- a/alembic/versions/70dcb6140e11_store_build_datetime.py +++ b/alembic/versions/70dcb6140e11_store_build_datetime.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "70dcb6140e11" diff --git a/alembic/versions/726cb0f70c6d_link_srpmbuildmodel_to_jobtriggermodel.py b/alembic/versions/726cb0f70c6d_link_srpmbuildmodel_to_jobtriggermodel.py index 5eff7a69b..c661cdeb2 100644 --- a/alembic/versions/726cb0f70c6d_link_srpmbuildmodel_to_jobtriggermodel.py +++ b/alembic/versions/726cb0f70c6d_link_srpmbuildmodel_to_jobtriggermodel.py @@ -6,27 +6,28 @@ """ -from alembic import op -import sqlalchemy as sa +import enum from datetime import datetime +from typing import TYPE_CHECKING + +import sqlalchemy as sa from sqlalchemy import ( + JSON, + Boolean, Column, - Integer, - String, DateTime, - ForeignKey, Enum, - orm, + ForeignKey, + Integer, + String, Text, - JSON, - Boolean, desc, + orm, ) from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import Session, relationship -from typing import TYPE_CHECKING -import enum +from alembic import op # revision identifiers, used by Alembic. revision = "726cb0f70c6d" diff --git a/alembic/versions/7a43773ac926_add_bugzillas.py b/alembic/versions/7a43773ac926_add_bugzillas.py index b0daba3af..0b196fa6a 100644 --- a/alembic/versions/7a43773ac926_add_bugzillas.py +++ b/alembic/versions/7a43773ac926_add_bugzillas.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "7a43773ac926" diff --git a/alembic/versions/7d2b9fb924fa_add_sync_release_pull_request_table.py b/alembic/versions/7d2b9fb924fa_add_sync_release_pull_request_table.py index b939d89f5..7144fbd55 100644 --- a/alembic/versions/7d2b9fb924fa_add_sync_release_pull_request_table.py +++ b/alembic/versions/7d2b9fb924fa_add_sync_release_pull_request_table.py @@ -6,11 +6,9 @@ """ -import sqlalchemy as sa - -from alembic import op from typing import TYPE_CHECKING +import sqlalchemy as sa from sqlalchemy import ( Column, ForeignKey, @@ -20,6 +18,8 @@ from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship +from alembic import op + if TYPE_CHECKING: Base = object else: diff --git a/alembic/versions/800abbbb23c9_allow_multiple_forges_in_allowlist.py b/alembic/versions/800abbbb23c9_allow_multiple_forges_in_allowlist.py index 3b253c372..2f2b67f80 100644 --- a/alembic/versions/800abbbb23c9_allow_multiple_forges_in_allowlist.py +++ b/alembic/versions/800abbbb23c9_allow_multiple_forges_in_allowlist.py @@ -9,13 +9,13 @@ import enum from typing import TYPE_CHECKING -from alembic import op import sqlalchemy as sa -from sqlalchemy import Column, Integer, String, Enum, orm +from sqlalchemy import Column, Enum, Integer, String, orm # from sqlalchemy.dialects import postgresql from sqlalchemy.ext.declarative import declarative_base +from alembic import op # revision identifiers, used by Alembic. revision = "800abbbb23c9" diff --git a/alembic/versions/855bc0b691c2_add_source_git_pr_and_dist_git_pr.py b/alembic/versions/855bc0b691c2_add_source_git_pr_and_dist_git_pr.py index ba5abeabe..0d0ea6c6b 100644 --- a/alembic/versions/855bc0b691c2_add_source_git_pr_and_dist_git_pr.py +++ b/alembic/versions/855bc0b691c2_add_source_git_pr_and_dist_git_pr.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "855bc0b691c2" diff --git a/alembic/versions/8ba13238bfa4_add_models_for_bodhi_updates.py b/alembic/versions/8ba13238bfa4_add_models_for_bodhi_updates.py index d5d792d3c..9bac739c7 100644 --- a/alembic/versions/8ba13238bfa4_add_models_for_bodhi_updates.py +++ b/alembic/versions/8ba13238bfa4_add_models_for_bodhi_updates.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "8ba13238bfa4" diff --git a/alembic/versions/8fee25b27402_drop_merge_duplicate_gitlab_projects.py b/alembic/versions/8fee25b27402_drop_merge_duplicate_gitlab_projects.py index 4e77132de..7c33ea597 100644 --- a/alembic/versions/8fee25b27402_drop_merge_duplicate_gitlab_projects.py +++ b/alembic/versions/8fee25b27402_drop_merge_duplicate_gitlab_projects.py @@ -8,11 +8,12 @@ from typing import TYPE_CHECKING -from alembic import op import sqlalchemy as sa from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base +from alembic import op + # https://github.com/python/mypy/issues/2477#issuecomment-313984522 ^_^ if TYPE_CHECKING: Base = object diff --git a/alembic/versions/99841c3f8ba8_adjust_kojibuildtargetmodel.py b/alembic/versions/99841c3f8ba8_adjust_kojibuildtargetmodel.py index 766901cd2..f46a703bf 100644 --- a/alembic/versions/99841c3f8ba8_adjust_kojibuildtargetmodel.py +++ b/alembic/versions/99841c3f8ba8_adjust_kojibuildtargetmodel.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "99841c3f8ba8" diff --git a/alembic/versions/9fe0e970880f_add_copr_build_groups.py b/alembic/versions/9fe0e970880f_add_copr_build_groups.py index 981ff10bc..39cae9ebe 100644 --- a/alembic/versions/9fe0e970880f_add_copr_build_groups.py +++ b/alembic/versions/9fe0e970880f_add_copr_build_groups.py @@ -12,25 +12,25 @@ from datetime import datetime from typing import TYPE_CHECKING -from packit_service.models import ProjectAndEventsConnector - -from alembic import op import sqlalchemy as sa import sqlalchemy.orm from sqlalchemy import ( + JSON, + Boolean, Column, - Integer, - String, DateTime, Enum, - Table, ForeignKey, - JSON, + Integer, + String, + Table, Text, - Boolean, ) -from sqlalchemy.orm import relationship from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship + +from alembic import op +from packit_service.models import ProjectAndEventsConnector if TYPE_CHECKING: Base = object diff --git a/alembic/versions/a0e48c400be4_store_submit_time_of_srpm_builds.py b/alembic/versions/a0e48c400be4_store_submit_time_of_srpm_builds.py index 26921e7ef..072fee320 100644 --- a/alembic/versions/a0e48c400be4_store_submit_time_of_srpm_builds.py +++ b/alembic/versions/a0e48c400be4_store_submit_time_of_srpm_builds.py @@ -6,9 +6,10 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op + # revision identifiers, used by Alembic. revision = "a0e48c400be4" down_revision = "521433a1fdb0" diff --git a/alembic/versions/a3a17014c282_add_times_for_bodhi_update_targets.py b/alembic/versions/a3a17014c282_add_times_for_bodhi_update_targets.py index 4b9851d60..3745af607 100644 --- a/alembic/versions/a3a17014c282_add_times_for_bodhi_update_targets.py +++ b/alembic/versions/a3a17014c282_add_times_for_bodhi_update_targets.py @@ -10,14 +10,14 @@ from typing import TYPE_CHECKING import sqlalchemy as sa -from alembic import op -from sqlalchemy import orm, Column, Integer, String, JSON, DateTime, ForeignKey -from sqlalchemy.orm import relationship, declarative_base +from sqlalchemy import JSON, Column, DateTime, ForeignKey, Integer, String, orm +from sqlalchemy.orm import declarative_base, relationship +from alembic import op from packit_service.models import ( GroupAndTargetModelConnector, - ProjectAndEventsConnector, GroupModel, + ProjectAndEventsConnector, ) # revision identifiers, used by Alembic. diff --git a/alembic/versions/a5c06aa9ef30_add_runmodel.py b/alembic/versions/a5c06aa9ef30_add_runmodel.py index 54e5a5a91..962a0598e 100644 --- a/alembic/versions/a5c06aa9ef30_add_runmodel.py +++ b/alembic/versions/a5c06aa9ef30_add_runmodel.py @@ -12,15 +12,15 @@ from typing import TYPE_CHECKING import sqlalchemy as sa -from alembic import op +from packit.exceptions import PackitException from sqlalchemy import ( + JSON, Boolean, Column, DateTime, Enum, ForeignKey, Integer, - JSON, String, Text, orm, @@ -28,7 +28,7 @@ from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship -from packit.exceptions import PackitException +from alembic import op if TYPE_CHECKING: Base = object diff --git a/alembic/versions/a619bd414ff0_add_build_status_enum.py b/alembic/versions/a619bd414ff0_add_build_status_enum.py index b6c9166c6..7872a9b3e 100644 --- a/alembic/versions/a619bd414ff0_add_build_status_enum.py +++ b/alembic/versions/a619bd414ff0_add_build_status_enum.py @@ -8,7 +8,6 @@ from alembic import op - # revision identifiers, used by Alembic. revision = "a619bd414ff0" down_revision = "320c791746f0" diff --git a/alembic/versions/a9c49475e9c7_add_testing_farm_groups.py b/alembic/versions/a9c49475e9c7_add_testing_farm_groups.py index 1f8e44bd5..540c502a7 100644 --- a/alembic/versions/a9c49475e9c7_add_testing_farm_groups.py +++ b/alembic/versions/a9c49475e9c7_add_testing_farm_groups.py @@ -12,25 +12,25 @@ from datetime import datetime from typing import TYPE_CHECKING -from packit_service.models import ProjectAndEventsConnector - -from alembic import op import sqlalchemy as sa import sqlalchemy.orm from sqlalchemy import ( + JSON, + Boolean, Column, - Integer, - String, DateTime, Enum, - Table, ForeignKey, - JSON, + Integer, + String, + Table, Text, - Boolean, ) -from sqlalchemy.orm import relationship from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship + +from alembic import op +from packit_service.models import ProjectAndEventsConnector if TYPE_CHECKING: Base = object diff --git a/alembic/versions/ab4c11acf5e1_fix_tf_add_canceled_state.py b/alembic/versions/ab4c11acf5e1_fix_tf_add_canceled_state.py index 0b44a9e1a..7af755cf8 100644 --- a/alembic/versions/ab4c11acf5e1_fix_tf_add_canceled_state.py +++ b/alembic/versions/ab4c11acf5e1_fix_tf_add_canceled_state.py @@ -8,7 +8,6 @@ from alembic import op - # revision identifiers, used by Alembic. revision = "ab4c11acf5e1" down_revision = "a3a17014c282" diff --git a/alembic/versions/adbdc1c21d7e_drop_task_results_table.py b/alembic/versions/adbdc1c21d7e_drop_task_results_table.py index 1eb754174..50dcf0c6c 100644 --- a/alembic/versions/adbdc1c21d7e_drop_task_results_table.py +++ b/alembic/versions/adbdc1c21d7e_drop_task_results_table.py @@ -6,10 +6,11 @@ """ -from alembic import op import sqlalchemy as sa from sqlalchemy.dialects import postgresql +from alembic import op + # revision identifiers, used by Alembic. revision = "adbdc1c21d7e" down_revision = "7a43773ac926" diff --git a/alembic/versions/af00a7f19025_move_commit_sha_to_project_events.py b/alembic/versions/af00a7f19025_move_commit_sha_to_project_events.py index 1b54be305..c92ec70e3 100644 --- a/alembic/versions/af00a7f19025_move_commit_sha_to_project_events.py +++ b/alembic/versions/af00a7f19025_move_commit_sha_to_project_events.py @@ -10,7 +10,6 @@ from typing import TYPE_CHECKING import sqlalchemy as sa -from alembic import op from sqlalchemy import ( Column, ForeignKey, @@ -22,6 +21,7 @@ from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship +from alembic import op if TYPE_CHECKING: Base = object diff --git a/alembic/versions/c6250555a36c_.py b/alembic/versions/c6250555a36c_.py index 2fbacd6f9..bfbd936f8 100644 --- a/alembic/versions/c6250555a36c_.py +++ b/alembic/versions/c6250555a36c_.py @@ -13,22 +13,22 @@ from os import getenv from typing import TYPE_CHECKING, Union -from alembic import op from celery.backends.database import Task from redis import Redis from sqlalchemy import ( Column, - Integer, - String, DateTime, - ForeignKey, Enum, + ForeignKey, + Integer, + String, orm, ) from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import Session, relationship from sqlalchemy.types import PickleType +from alembic import op from packit_service.constants import ALLOWLIST_CONSTANTS from packit_service.worker.events import InstallationEvent diff --git a/alembic/versions/d7c2f99cd14d_add_a_table_for_github_installations.py b/alembic/versions/d7c2f99cd14d_add_a_table_for_github_installations.py index a3b7989b8..43f46d376 100644 --- a/alembic/versions/d7c2f99cd14d_add_a_table_for_github_installations.py +++ b/alembic/versions/d7c2f99cd14d_add_a_table_for_github_installations.py @@ -6,9 +6,10 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op + # revision identifiers, used by Alembic. revision = "d7c2f99cd14d" down_revision = "d90948124e46" diff --git a/alembic/versions/d90948124e46_add_tables_for_triggers_koji_and_tests.py b/alembic/versions/d90948124e46_add_tables_for_triggers_koji_and_tests.py index 32d5b7fba..5aae56cd0 100644 --- a/alembic/versions/d90948124e46_add_tables_for_triggers_koji_and_tests.py +++ b/alembic/versions/d90948124e46_add_tables_for_triggers_koji_and_tests.py @@ -7,18 +7,19 @@ """ import enum -from typing import TYPE_CHECKING, Optional from collections.abc import Iterable +from typing import TYPE_CHECKING, Optional import sqlalchemy as sa -from alembic import op from flexmock import flexmock -from sqlalchemy import Integer, String, ForeignKey, Enum, orm +from sqlalchemy import Enum, ForeignKey, Integer, String, orm from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import Session, relationship from sqlalchemy.testing import config from sqlalchemy.testing.schema import Column +from alembic import op + # revision identifiers, used by Alembic. revision = "d90948124e46" down_revision = "dc1beda6749e" diff --git a/alembic/versions/db64a37ff1c6_add_package_name_to_the_pipeline.py b/alembic/versions/db64a37ff1c6_add_package_name_to_the_pipeline.py index 6bb24f13e..9ce180cf6 100644 --- a/alembic/versions/db64a37ff1c6_add_package_name_to_the_pipeline.py +++ b/alembic/versions/db64a37ff1c6_add_package_name_to_the_pipeline.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "db64a37ff1c6" diff --git a/alembic/versions/dc1beda6749e_add_tables_for_task_results.py b/alembic/versions/dc1beda6749e_add_tables_for_task_results.py index 82881415c..03a8e50fe 100644 --- a/alembic/versions/dc1beda6749e_add_tables_for_task_results.py +++ b/alembic/versions/dc1beda6749e_add_tables_for_task_results.py @@ -6,9 +6,10 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op + # revision identifiers, used by Alembic. revision = "dc1beda6749e" down_revision = "4292b00185bf" diff --git a/alembic/versions/e05e1b04de87_add_koji_build_tags.py b/alembic/versions/e05e1b04de87_add_koji_build_tags.py index ac8402ac3..ce691bb49 100644 --- a/alembic/versions/e05e1b04de87_add_koji_build_tags.py +++ b/alembic/versions/e05e1b04de87_add_koji_build_tags.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "e05e1b04de87" diff --git a/alembic/versions/e35bb9ce7313_added_instance_url_field_to_gitproject.py b/alembic/versions/e35bb9ce7313_added_instance_url_field_to_gitproject.py index 39036f653..b4ab7e89e 100644 --- a/alembic/versions/e35bb9ce7313_added_instance_url_field_to_gitproject.py +++ b/alembic/versions/e35bb9ce7313_added_instance_url_field_to_gitproject.py @@ -7,16 +7,14 @@ """ from typing import TYPE_CHECKING - from urllib.parse import urlparse -from alembic import op import sqlalchemy as sa -from sqlalchemy import orm - -from sqlalchemy import Column, Integer, String +from sqlalchemy import Column, Integer, String, orm from sqlalchemy.ext.declarative import declarative_base +from alembic import op + # https://github.com/python/mypy/issues/2477#issuecomment-313984522 ^_^ if TYPE_CHECKING: Base = object diff --git a/alembic/versions/e907a93de3ef_add_vm_image_builds_table.py b/alembic/versions/e907a93de3ef_add_vm_image_builds_table.py index f6e781f61..cfafc9974 100644 --- a/alembic/versions/e907a93de3ef_add_vm_image_builds_table.py +++ b/alembic/versions/e907a93de3ef_add_vm_image_builds_table.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "e907a93de3ef" diff --git a/alembic/versions/f0abb806c3d4_add_project_url_to_gitproject.py b/alembic/versions/f0abb806c3d4_add_project_url_to_gitproject.py index ba72d8805..1cd50bb0d 100644 --- a/alembic/versions/f0abb806c3d4_add_project_url_to_gitproject.py +++ b/alembic/versions/f0abb806c3d4_add_project_url_to_gitproject.py @@ -9,10 +9,11 @@ from typing import TYPE_CHECKING import sqlalchemy as sa -from alembic import op from sqlalchemy import Column, Integer, String, orm from sqlalchemy.ext.declarative import declarative_base +from alembic import op + # revision identifiers, used by Alembic. revision = "f0abb806c3d4" down_revision = "c6250555a36c" diff --git a/alembic/versions/f5792581522c_pull_from_upstream_releated_adjustements.py b/alembic/versions/f5792581522c_pull_from_upstream_releated_adjustements.py index b08810f4f..e8bca02bf 100644 --- a/alembic/versions/f5792581522c_pull_from_upstream_releated_adjustements.py +++ b/alembic/versions/f5792581522c_pull_from_upstream_releated_adjustements.py @@ -6,12 +6,13 @@ """ -from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. from sqlalchemy.dialects import postgresql +from alembic import op + revision = "f5792581522c" down_revision = "e907a93de3ef" branch_labels = None diff --git a/alembic/versions/fd785af95c19_add_anitya_related_models.py b/alembic/versions/fd785af95c19_add_anitya_related_models.py index ee16c04d2..1ee2a3a4b 100644 --- a/alembic/versions/fd785af95c19_add_anitya_related_models.py +++ b/alembic/versions/fd785af95c19_add_anitya_related_models.py @@ -6,9 +6,9 @@ """ -from alembic import op import sqlalchemy as sa +from alembic import op # revision identifiers, used by Alembic. revision = "fd785af95c19" diff --git a/files/scripts/allowlist.py b/files/scripts/allowlist.py index 7b526b27c..b49ae7d1b 100644 --- a/files/scripts/allowlist.py +++ b/files/scripts/allowlist.py @@ -7,8 +7,8 @@ CLI script to interact with our allowlist. """ -from urllib.parse import urlparse from typing import Optional +from urllib.parse import urlparse import click diff --git a/files/scripts/db-cleanup.py b/files/scripts/db-cleanup.py index 1b62ee3b5..916e0c734 100755 --- a/files/scripts/db-cleanup.py +++ b/files/scripts/db-cleanup.py @@ -4,11 +4,12 @@ # SPDX-License-Identifier: MIT import argparse -from sqlalchemy import create_engine, func, select, delete, distinct, union + +from sqlalchemy import create_engine, delete, distinct, func, select, union + from packit_service.models import ( CoprBuildGroupModel, CoprBuildTargetModel, - get_pg_url, GitBranchModel, GitProjectModel, IssueModel, @@ -23,13 +24,13 @@ SRPMBuildModel, SyncReleaseModel, SyncReleaseTargetModel, - tf_copr_association_table, TFTTestRunGroupModel, TFTTestRunTargetModel, VMImageBuildTargetModel, + get_pg_url, + tf_copr_association_table, ) - if __name__ == "__main__": parser = argparse.ArgumentParser( description="""\ diff --git a/packit_service/__init__.py b/packit_service/__init__.py index d325e7b2d..521cd6eed 100644 --- a/packit_service/__init__.py +++ b/packit_service/__init__.py @@ -1,7 +1,7 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT -from importlib.metadata import version, PackageNotFoundError +from importlib.metadata import PackageNotFoundError, version try: __version__ = version(__name__) diff --git a/packit_service/config.py b/packit_service/config.py index 1ae827a55..453d8df36 100644 --- a/packit_service/config.py +++ b/packit_service/config.py @@ -6,8 +6,6 @@ from pathlib import Path from typing import NamedTuple, Optional, Union -from yaml import safe_load - from ogr.abstract import GitProject, Issue from packit.config import ( Config, @@ -21,17 +19,19 @@ PackitException, PackitMissingConfigException, ) +from yaml import safe_load + from packit_service.constants import ( CONFIG_FILE_NAME, CONTACTS_URL, DOCS_HOW_TO_CONFIGURE_URL, + DOCS_VALIDATE_CONFIG, + DOCS_VALIDATE_HOOKS, SANDCASTLE_DEFAULT_PROJECT, SANDCASTLE_IMAGE, SANDCASTLE_PVC, SANDCASTLE_WORK_DIR, TESTING_FARM_API_URL, - DOCS_VALIDATE_CONFIG, - DOCS_VALIDATE_HOOKS, ) logger = logging.getLogger(__name__) diff --git a/packit_service/constants.py b/packit_service/constants.py index b8f032b58..2c6ead29c 100644 --- a/packit_service/constants.py +++ b/packit_service/constants.py @@ -1,7 +1,7 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT -from enum import Enum from datetime import datetime, timedelta +from enum import Enum CONTACTS_URL = "https://packit.dev/#contact" DOCS_URL = "https://packit.dev/docs" diff --git a/packit_service/models.py b/packit_service/models.py index 44aa229bc..482a951da 100644 --- a/packit_service/models.py +++ b/packit_service/models.py @@ -8,42 +8,45 @@ import enum import logging from collections import Counter +from collections.abc import Generator, Iterable from contextlib import contextmanager from datetime import datetime, timedelta, timezone from os import getenv from typing import ( - Optional, TYPE_CHECKING, + Optional, Union, overload, ) -from collections.abc import Generator, Iterable from urllib.parse import urlparse +from cachetools import TTLCache, cached from cachetools.func import ttl_cache -from cachetools import cached, TTLCache +from packit.config import JobConfigTriggerType from sqlalchemy import ( + JSON, Boolean, Column, DateTime, Enum, ForeignKey, Integer, - JSON, String, + Table, Text, + asc, + case, create_engine, desc, func, null, - case, - Table, - asc, ) from sqlalchemy.dialects.postgresql import array as psql_array from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import ( Session as SQLASession, +) +from sqlalchemy.orm import ( relationship, scoped_session, sessionmaker, @@ -51,7 +54,6 @@ from sqlalchemy.sql.functions import count from sqlalchemy.types import ARRAY -from packit.config import JobConfigTriggerType from packit_service.constants import ALLOWLIST_CONSTANTS logger = logging.getLogger(__name__) @@ -4039,10 +4041,14 @@ class OSHScanModel(Base): issues_fixed_url = Column(String) scan_results_url = Column(String) copr_build_target_id = Column( - Integer, ForeignKey("copr_build_targets.id"), unique=True + Integer, + ForeignKey("copr_build_targets.id"), + unique=True, ) copr_build_target = relationship( - "CoprBuildTargetModel", back_populates="scan", uselist=False + "CoprBuildTargetModel", + back_populates="scan", + uselist=False, ) @classmethod diff --git a/packit_service/schema.py b/packit_service/schema.py index 0bd761ea8..ddca8df2f 100644 --- a/packit_service/schema.py +++ b/packit_service/schema.py @@ -4,9 +4,9 @@ import typing from marshmallow import Schema, ValidationError, fields, post_load - from packit.config.common_package_config import Deployment from packit.schema import UserConfigSchema + from packit_service.config import MRTarget, ProjectToSync, ServiceConfig diff --git a/packit_service/service/api/__init__.py b/packit_service/service/api/__init__.py index 0b2cbd0f1..eb0b62378 100644 --- a/packit_service/service/api/__init__.py +++ b/packit_service/service/api/__init__.py @@ -4,21 +4,21 @@ from flask import Blueprint from flask_restx import Api +from packit_service.service.api.allowlist import ns as allowlist_ns +from packit_service.service.api.bodhi_updates import ns as bodhi_updates_ns from packit_service.service.api.copr_builds import ns as copr_builds_ns from packit_service.service.api.healthz import ns as healthz_ns from packit_service.service.api.installations import ns as installations_ns from packit_service.service.api.koji_builds import koji_builds_ns from packit_service.service.api.projects import ns as projects_ns -from packit_service.service.api.srpm_builds import ns as srpm_builds_ns -from packit_service.service.api.testing_farm import ns as testing_farm_ns -from packit_service.service.api.webhooks import ns as webhooks_ns -from packit_service.service.api.allowlist import ns as allowlist_ns -from packit_service.service.api.runs import ns as runs_ns from packit_service.service.api.propose_downstream import ns as propose_downstream_ns -from packit_service.service.api.usage import usage_ns from packit_service.service.api.pull_from_upstream import ns as pull_from_upstream_ns +from packit_service.service.api.runs import ns as runs_ns +from packit_service.service.api.srpm_builds import ns as srpm_builds_ns from packit_service.service.api.system import ns as system_ns -from packit_service.service.api.bodhi_updates import ns as bodhi_updates_ns +from packit_service.service.api.testing_farm import ns as testing_farm_ns +from packit_service.service.api.usage import usage_ns +from packit_service.service.api.webhooks import ns as webhooks_ns # https://flask-restplus.readthedocs.io/en/stable/scaling.html blueprint = Blueprint("api", __name__, url_prefix="/api") diff --git a/packit_service/service/api/bodhi_updates.py b/packit_service/service/api/bodhi_updates.py index 49b738b41..a528a2583 100644 --- a/packit_service/service/api/bodhi_updates.py +++ b/packit_service/service/api/bodhi_updates.py @@ -7,9 +7,9 @@ from flask_restx import Namespace, Resource from packit_service.models import ( - optional_timestamp, - BodhiUpdateTargetModel, BodhiUpdateGroupModel, + BodhiUpdateTargetModel, + optional_timestamp, ) from packit_service.service.api.parsers import indices, pagination_arguments from packit_service.service.api.utils import get_project_info_from_build, response_maker diff --git a/packit_service/service/api/copr_builds.py b/packit_service/service/api/copr_builds.py index befd7b887..fb4ec68ff 100644 --- a/packit_service/service/api/copr_builds.py +++ b/packit_service/service/api/copr_builds.py @@ -7,10 +7,10 @@ from flask_restx import Namespace, Resource from packit_service.models import ( - CoprBuildTargetModel, - optional_timestamp, BuildStatus, CoprBuildGroupModel, + CoprBuildTargetModel, + optional_timestamp, ) from packit_service.service.api.parsers import indices, pagination_arguments from packit_service.service.api.utils import get_project_info_from_build, response_maker diff --git a/packit_service/service/api/koji_builds.py b/packit_service/service/api/koji_builds.py index 456c6ed80..f81400042 100644 --- a/packit_service/service/api/koji_builds.py +++ b/packit_service/service/api/koji_builds.py @@ -8,9 +8,9 @@ from flask_restx import Namespace, Resource from packit_service.models import ( + KojiBuildGroupModel, KojiBuildTargetModel, optional_timestamp, - KojiBuildGroupModel, ) from packit_service.service.api.parsers import indices, pagination_arguments from packit_service.service.api.utils import get_project_info_from_build, response_maker diff --git a/packit_service/service/api/parsers.py b/packit_service/service/api/parsers.py index 66c42108a..ff0bc7347 100644 --- a/packit_service/service/api/parsers.py +++ b/packit_service/service/api/parsers.py @@ -2,7 +2,6 @@ # SPDX-License-Identifier: MIT from flask import request - from flask_restx import reqparse DEFAULT_PAGE = 1 diff --git a/packit_service/service/api/propose_downstream.py b/packit_service/service/api/propose_downstream.py index 5a469cd88..6f9171a11 100644 --- a/packit_service/service/api/propose_downstream.py +++ b/packit_service/service/api/propose_downstream.py @@ -7,15 +7,15 @@ from flask_restx import Namespace, Resource from packit_service.models import ( - SyncReleaseTargetModel, - SyncReleaseModel, SyncReleaseJobType, + SyncReleaseModel, + SyncReleaseTargetModel, ) from packit_service.service.api.parsers import indices, pagination_arguments from packit_service.service.api.utils import ( - response_maker, get_sync_release_info, get_sync_release_target_info, + response_maker, ) logger = getLogger("packit_service") diff --git a/packit_service/service/api/pull_from_upstream.py b/packit_service/service/api/pull_from_upstream.py index 654d3bdd3..5452ca6cd 100644 --- a/packit_service/service/api/pull_from_upstream.py +++ b/packit_service/service/api/pull_from_upstream.py @@ -7,15 +7,15 @@ from flask_restx import Namespace, Resource from packit_service.models import ( - SyncReleaseTargetModel, - SyncReleaseModel, SyncReleaseJobType, + SyncReleaseModel, + SyncReleaseTargetModel, ) from packit_service.service.api.parsers import indices, pagination_arguments from packit_service.service.api.utils import ( - response_maker, - get_sync_release_target_info, get_sync_release_info, + get_sync_release_target_info, + response_maker, ) logger = getLogger("packit_service") diff --git a/packit_service/service/api/runs.py b/packit_service/service/api/runs.py index ea67eed1d..d8b2885c1 100644 --- a/packit_service/service/api/runs.py +++ b/packit_service/service/api/runs.py @@ -7,18 +7,18 @@ from flask_restx import Namespace, Resource from packit_service.models import ( + BodhiUpdateGroupModel, + BodhiUpdateTargetModel, + BuildStatus, CoprBuildGroupModel, KojiBuildGroupModel, PipelineModel, - SyncReleaseModel, SRPMBuildModel, - TFTTestRunTargetModel, - optional_timestamp, - BuildStatus, + SyncReleaseModel, TFTTestRunGroupModel, - BodhiUpdateGroupModel, - BodhiUpdateTargetModel, + TFTTestRunTargetModel, VMImageBuildTargetModel, + optional_timestamp, ) from packit_service.service.api.parsers import indices, pagination_arguments from packit_service.service.api.utils import ( diff --git a/packit_service/service/api/srpm_builds.py b/packit_service/service/api/srpm_builds.py index a2994ec58..06117db0a 100644 --- a/packit_service/service/api/srpm_builds.py +++ b/packit_service/service/api/srpm_builds.py @@ -4,12 +4,12 @@ from http import HTTPStatus from logging import getLogger -from packit_service.service.urls import get_srpm_build_info_url from flask_restx import Namespace, Resource from packit_service.models import SRPMBuildModel, optional_timestamp from packit_service.service.api.parsers import indices, pagination_arguments from packit_service.service.api.utils import get_project_info_from_build, response_maker +from packit_service.service.urls import get_srpm_build_info_url logger = getLogger("packit_service") diff --git a/packit_service/service/api/system.py b/packit_service/service/api/system.py index 56bdbf3f8..7b7a6d5c7 100644 --- a/packit_service/service/api/system.py +++ b/packit_service/service/api/system.py @@ -3,17 +3,13 @@ import re from http import HTTPStatus from logging import getLogger - from typing import Optional -from setuptools_scm import get_version - -import packit - import ogr -from flask_restx import Namespace, Resource - +import packit import specfile +from flask_restx import Namespace, Resource +from setuptools_scm import get_version import packit_service from packit_service.service.api.utils import response_maker diff --git a/packit_service/service/api/testing_farm.py b/packit_service/service/api/testing_farm.py index 27bf6b9a5..9f1924bc8 100644 --- a/packit_service/service/api/testing_farm.py +++ b/packit_service/service/api/testing_farm.py @@ -12,9 +12,9 @@ from packit_service.config import ServiceConfig from packit_service.constants import CELERY_DEFAULT_MAIN_TASK_NAME from packit_service.models import ( + TFTTestRunGroupModel, TFTTestRunTargetModel, optional_timestamp, - TFTTestRunGroupModel, ) from packit_service.service.api.errors import ValidationFailed from packit_service.service.api.parsers import indices, pagination_arguments diff --git a/packit_service/service/api/usage.py b/packit_service/service/api/usage.py index 1c1a02d3a..d9cd980e4 100644 --- a/packit_service/service/api/usage.py +++ b/packit_service/service/api/usage.py @@ -2,20 +2,27 @@ # SPDX-License-Identifier: MIT import time - from datetime import datetime, timezone from http import HTTPStatus from logging import getLogger from typing import Any -from flask import request, escape, redirect, Response +from flask import Response, escape, redirect, request from flask_restx import Namespace, Resource +from packit_service.celerizer import celery_app +from packit_service.constants import ( + USAGE_DATE_IN_THE_PAST_STR, + USAGE_PAST_DAY_DATE_STR, + USAGE_PAST_MONTH_DATE_STR, + USAGE_PAST_WEEK_DATE_STR, + USAGE_PAST_YEAR_DATE_STR, +) from packit_service.models import ( CoprBuildGroupModel, GitProjectModel, - ProjectEventModelType, KojiBuildGroupModel, + ProjectEventModelType, SRPMBuildModel, SyncReleaseModel, TFTTestRunGroupModel, @@ -23,18 +30,10 @@ get_usage_data, ) from packit_service.service.api.utils import response_maker -from packit_service.constants import ( - USAGE_DATE_IN_THE_PAST_STR, - USAGE_PAST_DAY_DATE_STR, - USAGE_PAST_WEEK_DATE_STR, - USAGE_PAST_MONTH_DATE_STR, - USAGE_PAST_YEAR_DATE_STR, -) -from packit_service.celerizer import celery_app from packit_service.service.tasks import ( - get_usage_interval_data, - get_past_usage_data, calculate_onboarded_projects, + get_past_usage_data, + get_usage_interval_data, ) logger = getLogger("packit_service") diff --git a/packit_service/service/api/utils.py b/packit_service/service/api/utils.py index 441751f61..cbab054ff 100644 --- a/packit_service/service/api/utils.py +++ b/packit_service/service/api/utils.py @@ -7,20 +7,20 @@ from flask.json import jsonify from packit_service.models import ( - CoprBuildTargetModel, + AnityaProjectModel, + BodhiUpdateTargetModel, CoprBuildGroupModel, + CoprBuildTargetModel, GitProjectModel, - KojiBuildTargetModel, KojiBuildGroupModel, + KojiBuildTargetModel, SRPMBuildModel, - TFTTestRunTargetModel, - TFTTestRunGroupModel, SyncReleaseModel, SyncReleaseTargetModel, - optional_timestamp, - BodhiUpdateTargetModel, + TFTTestRunGroupModel, + TFTTestRunTargetModel, VMImageBuildTargetModel, - AnityaProjectModel, + optional_timestamp, ) diff --git a/packit_service/service/app.py b/packit_service/service/app.py index 028f3781c..c981b81e7 100644 --- a/packit_service/service/app.py +++ b/packit_service/service/app.py @@ -15,11 +15,11 @@ from flask_restx import __version__ as restx_version from flask_talisman import Talisman from lazy_object_proxy import Proxy +from packit.utils import set_logging from prometheus_client import make_wsgi_app as prometheus_app from syslog_rfc5424_formatter import RFC5424Formatter from werkzeug.middleware.dispatcher import DispatcherMiddleware -from packit.utils import set_logging from packit_service import __version__ as ps_version from packit_service.config import ServiceConfig from packit_service.sentry_integration import configure_sentry diff --git a/packit_service/service/db_project_events.py b/packit_service/service/db_project_events.py index ec072fc39..ac253a098 100644 --- a/packit_service/service/db_project_events.py +++ b/packit_service/service/db_project_events.py @@ -7,12 +7,13 @@ from typing import Optional from ogr.abstract import GitProject + from packit_service.models import ( GitBranchModel, IssueModel, + ProjectEventModel, ProjectReleaseModel, PullRequestModel, - ProjectEventModel, ) diff --git a/packit_service/service/tasks.py b/packit_service/service/tasks.py index 70ff46628..ce57af3dd 100644 --- a/packit_service/service/tasks.py +++ b/packit_service/service/tasks.py @@ -2,10 +2,9 @@ # SPDX-License-Identifier: MIT import logging +from collections import OrderedDict from datetime import timedelta from typing import Union -from collections import OrderedDict - from packit_service.celerizer import celery_app from packit_service.constants import ( @@ -13,8 +12,8 @@ USAGE_DATE_IN_THE_PAST, ) from packit_service.models import ( - get_usage_data, get_onboarded_projects, + get_usage_data, ) logger = logging.getLogger(__name__) diff --git a/packit_service/utils.py b/packit_service/utils.py index ac66a5bf5..a625427b1 100644 --- a/packit_service/utils.py +++ b/packit_service/utils.py @@ -11,11 +11,11 @@ from typing import Optional import requests - from ogr.abstract import PullRequest from packit.config import JobConfig, PackageConfig from packit.schema import JobConfigSchema, PackageConfigSchema from packit.utils import PackitFormatter + from packit_service import __version__ as ps_version logger = logging.getLogger(__name__) diff --git a/packit_service/worker/allowlist.py b/packit_service/worker/allowlist.py index fa7e08cec..e6b715834 100644 --- a/packit_service/worker/allowlist.py +++ b/packit_service/worker/allowlist.py @@ -2,36 +2,39 @@ # SPDX-License-Identifier: MIT import logging -from typing import Any, Optional, Union, Callable from collections.abc import Iterable +from typing import Any, Callable, Optional, Union from urllib.parse import urlparse from fasjson_client import Client from fasjson_client.errors import APIError - from ogr.abstract import GitProject from packit.api import PackitAPI from packit.config.job_config import JobConfig, JobType -from packit.exceptions import PackitException, PackitCommandFailedError +from packit.exceptions import PackitCommandFailedError, PackitException + from packit_service.config import ServiceConfig from packit_service.constants import ( + DENIED_MSG, + DOCS_APPROVAL_URL, FASJSON_URL, NAMESPACE_NOT_ALLOWED_MARKDOWN_DESCRIPTION, NAMESPACE_NOT_ALLOWED_MARKDOWN_ISSUE_INSTRUCTIONS, NOTIFICATION_REPO, - DOCS_APPROVAL_URL, - DENIED_MSG, ) from packit_service.models import AllowlistModel, AllowlistStatus from packit_service.worker.events import ( - EventData, AbstractCoprBuildEvent, + CheckRerunEvent, + EventData, InstallationEvent, IssueCommentEvent, IssueCommentGitlabEvent, KojiTaskEvent, MergeRequestCommentGitlabEvent, MergeRequestGitlabEvent, + OpenScanHubTaskFinishedEvent, + OpenScanHubTaskStartedEvent, PullRequestCommentGithubEvent, PullRequestCommentPagureEvent, PullRequestGithubEvent, @@ -41,9 +44,6 @@ PushPagureEvent, ReleaseEvent, TestingFarmResultsEvent, - CheckRerunEvent, - OpenScanHubTaskFinishedEvent, - OpenScanHubTaskStartedEvent, ) from packit_service.worker.events.gitlab import ReleaseGitlabEvent from packit_service.worker.events.koji import KojiBuildEvent, KojiBuildTagEvent diff --git a/packit_service/worker/celery_task.py b/packit_service/worker/celery_task.py index af5272817..177725f51 100644 --- a/packit_service/worker/celery_task.py +++ b/packit_service/worker/celery_task.py @@ -2,11 +2,10 @@ # SPDX-License-Identifier: MIT import logging -from typing import Optional, Any +from typing import Any, Optional from celery import Task - logger = logging.getLogger(__name__) diff --git a/packit_service/worker/checker/bodhi.py b/packit_service/worker/checker/bodhi.py index b8917b097..f658442f7 100644 --- a/packit_service/worker/checker/bodhi.py +++ b/packit_service/worker/checker/bodhi.py @@ -5,13 +5,18 @@ from packit.config.aliases import get_branches -from packit_service.constants import KojiBuildState, MSG_GET_IN_TOUCH - +from packit_service.constants import MSG_GET_IN_TOUCH, KojiBuildState from packit_service.worker.checker.abstract import ( ActorChecker, Checker, ) from packit_service.worker.checker.helper import DistgitAccountsChecker +from packit_service.worker.events import ( + IssueCommentEvent, + IssueCommentGitlabEvent, + PullRequestCommentPagureEvent, +) +from packit_service.worker.events.koji import KojiBuildEvent, KojiBuildTagEvent from packit_service.worker.handlers.mixin import ( GetKojiBuildData, GetKojiBuildDataFromKojiBuildEventMixin, @@ -23,13 +28,6 @@ ConfigFromEventMixin, PackitAPIWithDownstreamMixin, ) -from packit_service.worker.events import ( - PullRequestCommentPagureEvent, - IssueCommentEvent, - IssueCommentGitlabEvent, -) - -from packit_service.worker.events.koji import KojiBuildEvent, KojiBuildTagEvent from packit_service.worker.reporting import report_in_issue_repository logger = logging.getLogger(__name__) diff --git a/packit_service/worker/checker/copr.py b/packit_service/worker/checker/copr.py index 5e6d34ddd..4b480c8d8 100644 --- a/packit_service/worker/checker/copr.py +++ b/packit_service/worker/checker/copr.py @@ -15,10 +15,10 @@ ) from packit_service.worker.events.enums import GitlabEventAction from packit_service.worker.handlers.mixin import ( + ConfigFromEventMixin, GetCoprBuildJobHelperForIdMixin, GetCoprBuildJobHelperMixin, GetCoprSRPMBuildMixin, - ConfigFromEventMixin, ) from packit_service.worker.reporting import BaseCommitStatus diff --git a/packit_service/worker/checker/distgit.py b/packit_service/worker/checker/distgit.py index a3727502e..2eb426682 100644 --- a/packit_service/worker/checker/distgit.py +++ b/packit_service/worker/checker/distgit.py @@ -5,21 +5,22 @@ import re from packit.config.aliases import get_branches + from packit_service.constants import MSG_GET_IN_TOUCH from packit_service.utils import ( - pr_labels_match_configuration, get_packit_commands_from_comment, + pr_labels_match_configuration, ) -from packit_service.worker.checker.abstract import Checker, ActorChecker +from packit_service.worker.checker.abstract import ActorChecker, Checker from packit_service.worker.checker.helper import DistgitAccountsChecker from packit_service.worker.events import ( - PushPagureEvent, IssueCommentEvent, IssueCommentGitlabEvent, + PushPagureEvent, ) +from packit_service.worker.events.koji import KojiBuildTagEvent from packit_service.worker.events.new_hotness import NewHotnessUpdateEvent from packit_service.worker.events.pagure import PullRequestCommentPagureEvent -from packit_service.worker.events.koji import KojiBuildTagEvent from packit_service.worker.handlers.mixin import GetProjectToSyncMixin from packit_service.worker.mixin import ( GetPagurePullRequestMixin, diff --git a/packit_service/worker/checker/helper.py b/packit_service/worker/checker/helper.py index 825efeb7a..de5592292 100644 --- a/packit_service/worker/checker/helper.py +++ b/packit_service/worker/checker/helper.py @@ -3,7 +3,7 @@ import logging from enum import Enum -from ogr.abstract import GitProject, AccessLevel +from ogr.abstract import AccessLevel, GitProject logger = logging.getLogger(__name__) diff --git a/packit_service/worker/checker/open_scan_hub.py b/packit_service/worker/checker/open_scan_hub.py index 33374bcdd..7e5e6c792 100644 --- a/packit_service/worker/checker/open_scan_hub.py +++ b/packit_service/worker/checker/open_scan_hub.py @@ -6,6 +6,7 @@ from packit.config import ( aliases, ) + from packit_service.worker.checker.abstract import Checker logger = logging.getLogger(__name__) @@ -20,7 +21,7 @@ def pre_check(self) -> bool: ) if "fedora-rawhide-x86_64" not in branches: logger.debug( - "Skipping job configuration with no fedora-rawhide-x86_64 target." + "Skipping job configuration with no fedora-rawhide-x86_64 target.", ) return False return True diff --git a/packit_service/worker/checker/testing_farm.py b/packit_service/worker/checker/testing_farm.py index 8465d2a67..ea3516c47 100644 --- a/packit_service/worker/checker/testing_farm.py +++ b/packit_service/worker/checker/testing_farm.py @@ -4,9 +4,9 @@ import logging from packit_service.constants import ( + DOCS_TESTING_FARM, INTERNAL_TF_BUILDS_AND_TESTS_NOT_ALLOWED, INTERNAL_TF_TESTS_NOT_ALLOWED, - DOCS_TESTING_FARM, ) from packit_service.worker.checker.abstract import ( ActorChecker, @@ -15,9 +15,9 @@ from packit_service.worker.events.enums import GitlabEventAction from packit_service.worker.events.gitlab import MergeRequestGitlabEvent from packit_service.worker.handlers.mixin import ( - GetTestingFarmJobHelperMixin, GetCoprBuildMixin, GetGithubCommentEventMixin, + GetTestingFarmJobHelperMixin, ) from packit_service.worker.reporting import BaseCommitStatus diff --git a/packit_service/worker/checker/vm_image.py b/packit_service/worker/checker/vm_image.py index aede49076..ba920d92a 100644 --- a/packit_service/worker/checker/vm_image.py +++ b/packit_service/worker/checker/vm_image.py @@ -7,15 +7,15 @@ from packit_service.models import ( VMImageBuildStatus, ) -from packit_service.worker.checker.abstract import Checker, ActorChecker +from packit_service.worker.checker.abstract import ActorChecker, Checker +from packit_service.worker.handlers.mixin import ( + GetCoprBuildJobHelperMixin, + GetVMImageDataMixin, +) from packit_service.worker.mixin import ( ConfigFromEventMixin, GetReporterFromJobHelperMixin, ) -from packit_service.worker.handlers.mixin import ( - GetVMImageDataMixin, - GetCoprBuildJobHelperMixin, -) from packit_service.worker.reporting import BaseCommitStatus logger = logging.getLogger(__name__) diff --git a/packit_service/worker/database.py b/packit_service/worker/database.py index a893fc584..9081bce47 100644 --- a/packit_service/worker/database.py +++ b/packit_service/worker/database.py @@ -3,20 +3,20 @@ from datetime import timedelta from gzip import open as gzip_open -from logging import getLogger, DEBUG, INFO +from logging import DEBUG, INFO, getLogger from os import getenv from pathlib import Path from shutil import copyfileobj from boto3 import client as boto3_client from botocore.exceptions import ClientError - from packit.utils.commands import run_command + from packit_service.constants import ( - SRPMBUILDS_OUTDATED_AFTER_DAYS, PACKAGE_CONFIGS_OUTDATED_AFTER_DAYS, + SRPMBUILDS_OUTDATED_AFTER_DAYS, ) -from packit_service.models import get_pg_url, SRPMBuildModel, ProjectEventModel +from packit_service.models import ProjectEventModel, SRPMBuildModel, get_pg_url logger = getLogger(__name__) diff --git a/packit_service/worker/events/__init__.py b/packit_service/worker/events/__init__.py index 068867a4f..f5c380ff5 100644 --- a/packit_service/worker/events/__init__.py +++ b/packit_service/worker/events/__init__.py @@ -1,60 +1,58 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT -from packit_service.worker.events.copr import ( - AbstractCoprBuildEvent, - CoprBuildStartEvent, - CoprBuildEndEvent, -) from packit_service.worker.events.comment import ( AbstractCommentEvent, - AbstractPRCommentEvent, AbstractIssueCommentEvent, + AbstractPRCommentEvent, +) +from packit_service.worker.events.copr import ( + AbstractCoprBuildEvent, + CoprBuildEndEvent, + CoprBuildStartEvent, ) from packit_service.worker.events.event import ( - EventData, - Event, AbstractForgeIndependentEvent, + Event, + EventData, ) from packit_service.worker.events.github import ( + AbstractGithubEvent, + CheckRerunCommitEvent, + CheckRerunEvent, + CheckRerunPullRequestEvent, + CheckRerunReleaseEvent, InstallationEvent, IssueCommentEvent, PullRequestCommentGithubEvent, PullRequestGithubEvent, PushGitHubEvent, ReleaseEvent, - AbstractGithubEvent, - CheckRerunCommitEvent, - CheckRerunPullRequestEvent, - CheckRerunReleaseEvent, - CheckRerunEvent, ) from packit_service.worker.events.gitlab import ( IssueCommentGitlabEvent, MergeRequestCommentGitlabEvent, MergeRequestGitlabEvent, - PushGitlabEvent, PipelineGitlabEvent, + PushGitlabEvent, ReleaseGitlabEvent, TagPushGitlabEvent, ) from packit_service.worker.events.koji import KojiTaskEvent +from packit_service.worker.events.open_scan_hub import ( + OpenScanHubTaskFinishedEvent, + OpenScanHubTaskStartedEvent, +) from packit_service.worker.events.pagure import ( - PullRequestPagureEvent, + AbstractPagureEvent, PullRequestCommentPagureEvent, PullRequestFlagPagureEvent, + PullRequestPagureEvent, PushPagureEvent, - AbstractPagureEvent, ) from packit_service.worker.events.testing_farm import TestingFarmResultsEvent - from packit_service.worker.events.vm_image import VMImageBuildResultEvent -from packit_service.worker.events.open_scan_hub import ( - OpenScanHubTaskFinishedEvent, - OpenScanHubTaskStartedEvent, -) - __all__ = [ Event.__name__, EventData.__name__, diff --git a/packit_service/worker/events/comment.py b/packit_service/worker/events/comment.py index b2f4c4b99..1024d52d7 100644 --- a/packit_service/worker/events/comment.py +++ b/packit_service/worker/events/comment.py @@ -8,7 +8,8 @@ from typing import Optional from ogr.abstract import Comment, Issue -from packit_service.models import TestingFarmResult, BuildStatus + +from packit_service.models import BuildStatus, TestingFarmResult from packit_service.service.db_project_events import ( AddIssueEventToDb, AddPullRequestEventToDb, diff --git a/packit_service/worker/events/copr.py b/packit_service/worker/events/copr.py index 1b9cab6f1..2a35b31aa 100644 --- a/packit_service/worker/events/copr.py +++ b/packit_service/worker/events/copr.py @@ -6,13 +6,14 @@ from ogr.abstract import GitProject from ogr.services.pagure import PagureProject + from packit_service.constants import COPR_SRPM_CHROOT from packit_service.models import ( + AbstractProjectObjectDbType, CoprBuildTargetModel, + ProjectEventModel, ProjectEventModelType, - AbstractProjectObjectDbType, SRPMBuildModel, - ProjectEventModel, ) from packit_service.worker.events.enums import FedmsgTopic from packit_service.worker.events.event import AbstractResultEvent diff --git a/packit_service/worker/events/event.py b/packit_service/worker/events/event.py index 3db669dad..85dff774e 100644 --- a/packit_service/worker/events/event.py +++ b/packit_service/worker/events/event.py @@ -12,14 +12,15 @@ from ogr.abstract import GitProject, PullRequest from ogr.parsing import RepoUrl from packit.config import JobConfigTriggerType, PackageConfig + from packit_service.config import PackageConfigGetter, ServiceConfig from packit_service.models import ( AbstractProjectObjectDbType, - ProjectEventModel, + AnityaProjectModel, CoprBuildTargetModel, + ProjectEventModel, TFTTestRunTargetModel, filter_most_recent_target_names_by_status, - AnityaProjectModel, ) logger = getLogger(__name__) diff --git a/packit_service/worker/events/github.py b/packit_service/worker/events/github.py index a1d8ed5bf..cc1b5d333 100644 --- a/packit_service/worker/events/github.py +++ b/packit_service/worker/events/github.py @@ -3,33 +3,33 @@ from typing import Optional, Union -from ogr.abstract import GitProject, Comment +from ogr.abstract import Comment, GitProject from packit_service.models import ( + AbstractProjectObjectDbType, AllowlistStatus, GitBranchModel, + ProjectEventModel, ProjectReleaseModel, PullRequestModel, - ProjectEventModel, - AbstractProjectObjectDbType, ) from packit_service.service.db_project_events import ( - AddPullRequestEventToDb, AddBranchPushEventToDb, + AddPullRequestEventToDb, AddReleaseEventToDb, ) from packit_service.worker.events.comment import ( - AbstractPRCommentEvent, AbstractIssueCommentEvent, + AbstractPRCommentEvent, ) from packit_service.worker.events.enums import ( IssueCommentAction, - PullRequestCommentAction, PullRequestAction, + PullRequestCommentAction, ) from packit_service.worker.events.event import ( - Event, AbstractForgeIndependentEvent, + Event, ) diff --git a/packit_service/worker/events/gitlab.py b/packit_service/worker/events/gitlab.py index 1cfd7aaef..c00911d31 100644 --- a/packit_service/worker/events/gitlab.py +++ b/packit_service/worker/events/gitlab.py @@ -2,10 +2,11 @@ # SPDX-License-Identifier: MIT from typing import Optional -from ogr.abstract import GitProject, Comment +from ogr.abstract import Comment, GitProject + from packit_service.service.db_project_events import ( - AddPullRequestEventToDb, AddBranchPushEventToDb, + AddPullRequestEventToDb, AddReleaseEventToDb, ) from packit_service.worker.events.comment import ( diff --git a/packit_service/worker/events/koji.py b/packit_service/worker/events/koji.py index fd2cc7db4..8eefcb93e 100644 --- a/packit_service/worker/events/koji.py +++ b/packit_service/worker/events/koji.py @@ -1,25 +1,26 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT import logging -from typing import Union, Optional +from typing import Optional, Union from ogr.abstract import GitProject from ogr.services.pagure import PagureProject from packit.config import JobConfigTriggerType, PackageConfig from packit.utils.koji_helper import KojiHelper + from packit_service.config import PackageConfigGetter from packit_service.constants import KojiBuildState, KojiTaskState from packit_service.models import ( AbstractProjectObjectDbType, + GitBranchModel, KojiBuildTargetModel, - PullRequestModel, - ProjectReleaseModel, ProjectEventModel, - GitBranchModel, + ProjectReleaseModel, + PullRequestModel, ) from packit_service.worker.events.event import ( - use_for_job_config_trigger, AbstractResultEvent, + use_for_job_config_trigger, ) logger = logging.getLogger(__name__) diff --git a/packit_service/worker/events/new_hotness.py b/packit_service/worker/events/new_hotness.py index d3d725988..83b1abfee 100644 --- a/packit_service/worker/events/new_hotness.py +++ b/packit_service/worker/events/new_hotness.py @@ -8,10 +8,10 @@ from ogr.abstract import GitProject from ogr.parsing import RepoUrl +from packit.config import JobConfigTriggerType, PackageConfig -from packit.config import PackageConfig, JobConfigTriggerType -from packit_service.config import ServiceConfig, PackageConfigGetter -from packit_service.models import ProjectReleaseModel, ProjectEventModel +from packit_service.config import PackageConfigGetter, ServiceConfig +from packit_service.models import ProjectEventModel, ProjectReleaseModel from packit_service.worker.events import Event from packit_service.worker.events.event import use_for_job_config_trigger diff --git a/packit_service/worker/events/open_scan_hub.py b/packit_service/worker/events/open_scan_hub.py index 8d9876667..22ce9491a 100644 --- a/packit_service/worker/events/open_scan_hub.py +++ b/packit_service/worker/events/open_scan_hub.py @@ -2,17 +2,18 @@ # SPDX-License-Identifier: MIT import enum -from typing import Optional from logging import getLogger +from typing import Optional from ogr.abstract import GitProject + from packit_service.config import ServiceConfig -from packit_service.worker.events.event import AbstractResultEvent from packit_service.models import ( AbstractProjectObjectDbType, - ProjectEventModel, OSHScanModel, + ProjectEventModel, ) +from packit_service.worker.events.event import AbstractResultEvent logger = getLogger(__name__) @@ -36,7 +37,7 @@ def __init__( logger.warning( f"Scan with id {task_id} not found in the database." " It should have been created when receiving the CoprBuildEndEvent" - " and should have been associated with the copr build." + " and should have been associated with the copr build.", ) else: self.build = self.scan.copr_build_target @@ -56,7 +57,7 @@ def get_db_project_event(self) -> Optional[ProjectEventModel]: def get_project(self) -> GitProject: return ServiceConfig.get_service_config().get_project( - self.db_project_object.project.project_url + self.db_project_object.project.project_url, ) def get_non_serializable_attributes(self): diff --git a/packit_service/worker/events/pagure.py b/packit_service/worker/events/pagure.py index 8969a35d5..670c66932 100644 --- a/packit_service/worker/events/pagure.py +++ b/packit_service/worker/events/pagure.py @@ -7,18 +7,18 @@ from ogr.abstract import Comment, GitProject from ogr.parsing import RepoUrl from packit.config import PackageConfig -from packit_service.utils import get_packit_commands_from_comment -from packit_service.config import PackageConfigGetter, ServiceConfig +from packit_service.config import PackageConfigGetter, ServiceConfig from packit_service.service.db_project_events import ( AddBranchPushEventToDb, AddPullRequestEventToDb, ) +from packit_service.utils import get_packit_commands_from_comment +from packit_service.worker.events.comment import AbstractPRCommentEvent from packit_service.worker.events.enums import ( PullRequestAction, PullRequestCommentAction, ) -from packit_service.worker.events.comment import AbstractPRCommentEvent from packit_service.worker.events.event import AbstractForgeIndependentEvent logger = getLogger(__name__) diff --git a/packit_service/worker/events/testing_farm.py b/packit_service/worker/events/testing_farm.py index 92e48239d..74193a982 100644 --- a/packit_service/worker/events/testing_farm.py +++ b/packit_service/worker/events/testing_farm.py @@ -5,12 +5,13 @@ from ogr.abstract import GitProject from ogr.services.pagure import PagureProject + from packit_service.models import ( - TestingFarmResult, AbstractProjectObjectDbType, + ProjectEventModel, PullRequestModel, + TestingFarmResult, TFTTestRunTargetModel, - ProjectEventModel, ) from packit_service.worker.events.event import AbstractResultEvent diff --git a/packit_service/worker/events/vm_image.py b/packit_service/worker/events/vm_image.py index 69d13c93b..9f207ea05 100644 --- a/packit_service/worker/events/vm_image.py +++ b/packit_service/worker/events/vm_image.py @@ -1,11 +1,11 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT -from typing import Union, Optional +from typing import Optional, Union from packit_service.models import ( - VMImageBuildTargetModel, - VMImageBuildStatus, ProjectEventModel, + VMImageBuildStatus, + VMImageBuildTargetModel, ) from packit_service.worker.events.event import ( AbstractProjectObjectDbType, diff --git a/packit_service/worker/handlers/__init__.py b/packit_service/worker/handlers/__init__.py index 92a1f30c7..3e59a20e1 100644 --- a/packit_service/worker/handlers/__init__.py +++ b/packit_service/worker/handlers/__init__.py @@ -14,13 +14,13 @@ JobHandler, ) from packit_service.worker.handlers.copr import ( - CoprBuildHandler, CoprBuildEndHandler, + CoprBuildHandler, CoprBuildStartHandler, ) from packit_service.worker.handlers.distgit import ( - SyncFromDownstream, ProposeDownstreamHandler, + SyncFromDownstream, ) from packit_service.worker.handlers.forges import ( GithubAppInstallationHandler, @@ -30,6 +30,10 @@ KojiBuildHandler, KojiTaskReportHandler, ) +from packit_service.worker.handlers.open_scan_hub import ( + OpenScanHubTaskFinishedHandler, + OpenScanHubTaskStartedHandler, +) from packit_service.worker.handlers.testing_farm import ( TestingFarmHandler, TestingFarmResultsHandler, @@ -38,10 +42,6 @@ VMImageBuildHandler, VMImageBuildResultHandler, ) -from packit_service.worker.handlers.open_scan_hub import ( - OpenScanHubTaskFinishedHandler, - OpenScanHubTaskStartedHandler, -) __all__ = [ Handler.__name__, diff --git a/packit_service/worker/handlers/abstract.py b/packit_service/worker/handlers/abstract.py index fcfe354b9..421a76d7f 100644 --- a/packit_service/worker/handlers/abstract.py +++ b/packit_service/worker/handlers/abstract.py @@ -13,29 +13,27 @@ from pathlib import Path from typing import Optional -from celery import Task -from celery import signature +from celery import Task, signature from celery.canvas import Signature from ogr.abstract import GitProject from packit.config import JobConfig, JobType, PackageConfig from packit.constants import DATETIME_FORMAT -from packit_service.config import ServiceConfig +from packit_service.config import ServiceConfig from packit_service.models import ( AbstractProjectObjectDbType, ) from packit_service.sentry_integration import push_scope_to_sentry from packit_service.utils import dump_job_config, dump_package_config from packit_service.worker.celery_task import CeleryTask -from packit_service.worker.events import Event, EventData -from packit_service.worker.monitoring import Pushgateway -from packit_service.worker.result import TaskResults from packit_service.worker.checker.abstract import Checker - +from packit_service.worker.events import Event, EventData from packit_service.worker.mixin import ( Config, PackitAPIProtocol, ) +from packit_service.worker.monitoring import Pushgateway +from packit_service.worker.result import TaskResults logger = logging.getLogger(__name__) diff --git a/packit_service/worker/handlers/bodhi.py b/packit_service/worker/handlers/bodhi.py index b17eec1be..ca1009573 100644 --- a/packit_service/worker/handlers/bodhi.py +++ b/packit_service/worker/handlers/bodhi.py @@ -11,53 +11,53 @@ from typing import Optional from celery import Task - -from packit.config import JobConfig, JobType, PackageConfig, Deployment +from packit.config import Deployment, JobConfig, JobType, PackageConfig from packit.exceptions import PackitException + from packit_service.config import ServiceConfig from packit_service.constants import ( - MSG_RETRIGGER, - MSG_GET_IN_TOUCH, - MSG_DOWNSTREAM_JOB_ERROR_HEADER, DEFAULT_RETRY_BACKOFF, + MSG_DOWNSTREAM_JOB_ERROR_HEADER, + MSG_GET_IN_TOUCH, + MSG_RETRIGGER, ) from packit_service.models import ( BodhiUpdateGroupModel, - PipelineModel, BodhiUpdateTargetModel, KojiBuildTargetModel, + PipelineModel, ) from packit_service.worker.checker.abstract import Checker from packit_service.worker.checker.bodhi import ( - IsAuthorAPackager, HasIssueCommenterRetriggeringPermissions, + IsAuthorAPackager, IsKojiBuildCompleteAndBranchConfiguredCheckEvent, - IsKojiBuildCompleteAndBranchConfiguredCheckSidetag, IsKojiBuildCompleteAndBranchConfiguredCheckService, + IsKojiBuildCompleteAndBranchConfiguredCheckSidetag, IsKojiBuildOwnerMatchingConfiguration, ) from packit_service.worker.events import ( - PullRequestCommentPagureEvent, IssueCommentEvent, IssueCommentGitlabEvent, + PullRequestCommentPagureEvent, ) from packit_service.worker.events.koji import KojiBuildEvent -from packit_service.worker.helpers.sidetag import SidetagHelper from packit_service.worker.handlers.abstract import ( + RetriableJobHandler, TaskName, configured_as, reacts_to, - RetriableJobHandler, run_for_comment, ) from packit_service.worker.handlers.mixin import ( - GetKojiBuildDataFromKojiServiceMultipleBranches, + GetKojiBuildData, GetKojiBuildDataFromKojiBuildEventMixin, GetKojiBuildDataFromKojiBuildTagEventMixin, GetKojiBuildDataFromKojiServiceMixin, + GetKojiBuildDataFromKojiServiceMultipleBranches, GetKojiBuildEventMixin, - GetKojiBuildData, ) +from packit_service.worker.helpers.sidetag import SidetagHelper from packit_service.worker.mixin import ( ConfigFromDistGitUrlMixin, GetBranchesFromIssueMixin, diff --git a/packit_service/worker/handlers/copr.py b/packit_service/worker/handlers/copr.py index 663745e8c..8af9714f2 100644 --- a/packit_service/worker/handlers/copr.py +++ b/packit_service/worker/handlers/copr.py @@ -5,24 +5,24 @@ from datetime import datetime, timezone from typing import Optional -from celery import signature, Task - +from celery import Task, signature from ogr.services.github import GithubProject from ogr.services.gitlab import GitlabProject from packit.config import ( JobConfig, + JobConfigTriggerType, JobType, ) -from packit.config import JobConfigTriggerType from packit.config.package_config import PackageConfig + from packit_service import sentry_integration from packit_service.constants import ( COPR_API_SUCC_STATE, COPR_SRPM_CHROOT, ) from packit_service.models import ( - CoprBuildTargetModel, BuildStatus, + CoprBuildTargetModel, ProjectEventModelType, ) from packit_service.service.urls import get_copr_build_info_url, get_srpm_build_info_url @@ -34,14 +34,18 @@ ) from packit_service.worker.checker.abstract import Checker from packit_service.worker.checker.copr import ( - CanActorRunTestsJob, AreOwnerAndProjectMatchingJob, - IsGitForgeProjectAndEventOk, BuildNotAlreadyStarted, + CanActorRunTestsJob, + IsGitForgeProjectAndEventOk, IsJobConfigTriggerMatching, IsPackageMatchingJobView, ) from packit_service.worker.events import ( + AbstractPRCommentEvent, + CheckRerunCommitEvent, + CheckRerunPullRequestEvent, + CheckRerunReleaseEvent, CoprBuildEndEvent, CoprBuildStartEvent, MergeRequestGitlabEvent, @@ -49,26 +53,22 @@ PushGitHubEvent, PushGitlabEvent, ReleaseEvent, - CheckRerunCommitEvent, - CheckRerunPullRequestEvent, - CheckRerunReleaseEvent, - AbstractPRCommentEvent, ReleaseGitlabEvent, ) from packit_service.worker.handlers.abstract import ( JobHandler, + RetriableJobHandler, TaskName, configured_as, reacts_to, - run_for_comment, run_for_check_rerun, - RetriableJobHandler, + run_for_comment, ) from packit_service.worker.handlers.mixin import ( + ConfigFromEventMixin, GetCoprBuildEventMixin, GetCoprBuildJobHelperForIdMixin, GetCoprBuildJobHelperMixin, - ConfigFromEventMixin, ) from packit_service.worker.helpers.open_scan_hub import OpenScanHubHelper from packit_service.worker.mixin import PackitAPIWithDownstreamMixin diff --git a/packit_service/worker/handlers/distgit.py b/packit_service/worker/handlers/distgit.py index e39f98c31..7b4466181 100644 --- a/packit_service/worker/handlers/distgit.py +++ b/packit_service/worker/handlers/distgit.py @@ -11,84 +11,83 @@ from datetime import datetime from functools import partial from os import getenv -from typing import Optional, ClassVar +from typing import ClassVar, Optional from celery import Task - -from ogr.abstract import PullRequest, AuthMethod +from ogr.abstract import AuthMethod, PullRequest from ogr.services.github import GithubService -from packit.config import JobConfig, JobType, JobConfigTriggerType, Deployment -from packit.config import aliases +from packit.config import Deployment, JobConfig, JobConfigTriggerType, JobType, aliases from packit.config.package_config import PackageConfig from packit.exceptions import ( - PackitException, PackitDownloadFailedException, + PackitException, ReleaseSkippedPackitException, ) from packit.utils.koji_helper import KojiHelper + from packit_service import sentry_integration from packit_service.config import PackageConfigGetter, ServiceConfig from packit_service.constants import ( CONTACTS_URL, - MSG_RETRIGGER, - MSG_GET_IN_TOUCH, - MSG_DOWNSTREAM_JOB_ERROR_HEADER, DEFAULT_RETRY_BACKOFF, + MSG_DOWNSTREAM_JOB_ERROR_HEADER, + MSG_GET_IN_TOUCH, + MSG_RETRIGGER, MSG_RETRIGGER_DISTGIT, RETRY_LIMIT_RELEASE_ARCHIVE_DOWNLOAD_ERROR, KojiBuildState, ) from packit_service.models import ( - SyncReleasePullRequestModel, - SyncReleaseTargetStatus, - SyncReleaseTargetModel, - SyncReleaseModel, - SyncReleaseStatus, - SyncReleaseJobType, + KojiBuildGroupModel, KojiBuildTargetModel, PipelineModel, - KojiBuildGroupModel, + SyncReleaseJobType, + SyncReleaseModel, + SyncReleasePullRequestModel, + SyncReleaseStatus, + SyncReleaseTargetModel, + SyncReleaseTargetStatus, ) from packit_service.service.urls import ( get_propose_downstream_info_url, get_pull_from_upstream_info_url, ) from packit_service.utils import ( - gather_packit_logs_to_buffer, collect_packit_logs, - get_packit_commands_from_comment, + gather_packit_logs_to_buffer, get_koji_task_id_and_url_from_stdout, + get_packit_commands_from_comment, ) from packit_service.worker.checker.abstract import Checker from packit_service.worker.checker.distgit import ( - IsProjectOk, - PermissionOnDistgit, - ValidInformationForPullFromUpstream, HasIssueCommenterRetriggeringPermissions, + IsProjectOk, IsUpstreamTagMatchingConfig, LabelsOnDistgitPR, + PermissionOnDistgit, TaggedBuildIsNotABuildOfSelf, + ValidInformationForPullFromUpstream, ) from packit_service.worker.events import ( - PushPagureEvent, - ReleaseEvent, - ReleaseGitlabEvent, AbstractIssueCommentEvent, CheckRerunReleaseEvent, - PullRequestCommentPagureEvent, IssueCommentEvent, IssueCommentGitlabEvent, + PullRequestCommentPagureEvent, + PushPagureEvent, + ReleaseEvent, + ReleaseGitlabEvent, ) from packit_service.worker.events.koji import KojiBuildTagEvent from packit_service.worker.events.new_hotness import NewHotnessUpdateEvent from packit_service.worker.handlers.abstract import ( JobHandler, + RetriableJobHandler, TaskName, configured_as, reacts_to, - run_for_comment, run_for_check_rerun, - RetriableJobHandler, + run_for_comment, ) from packit_service.worker.handlers.mixin import GetProjectToSyncMixin from packit_service.worker.helpers.sidetag import SidetagHelper @@ -101,15 +100,15 @@ from packit_service.worker.helpers.sync_release.sync_release import SyncReleaseHelper from packit_service.worker.mixin import ( Config, - LocalProjectMixin, + ConfigFromDistGitUrlMixin, ConfigFromEventMixin, - GetBranchesFromIssueMixin, ConfigFromUrlMixin, - ConfigFromDistGitUrlMixin, + GetBranchesFromIssueMixin, GetPagurePullRequestMixin, - PackitAPIWithUpstreamMixin, - PackitAPIWithDownstreamMixin, GetSyncReleaseTagMixin, + LocalProjectMixin, + PackitAPIWithDownstreamMixin, + PackitAPIWithUpstreamMixin, ) from packit_service.worker.reporting import ( BaseCommitStatus, diff --git a/packit_service/worker/handlers/forges.py b/packit_service/worker/handlers/forges.py index 84fe46d4d..fdad92a1b 100644 --- a/packit_service/worker/handlers/forges.py +++ b/packit_service/worker/handlers/forges.py @@ -8,17 +8,17 @@ import logging from packit.config import ( - JobConfig, Deployment, + JobConfig, ) from packit.config.package_config import PackageConfig + from packit_service.config import PackageConfigGetter -from packit_service.worker.mixin import ConfigFromEventMixin from packit_service.constants import CONTACTS_URL, DOCS_APPROVAL_URL, NOTIFICATION_REPO from packit_service.models import ( - GithubInstallationModel, AllowlistModel, AllowlistStatus, + GithubInstallationModel, ) from packit_service.utils import get_packit_commands_from_comment from packit_service.worker.allowlist import Allowlist @@ -33,7 +33,11 @@ TaskName, reacts_to, ) -from packit_service.worker.mixin import GetIssueMixin, PackitAPIWithDownstreamMixin +from packit_service.worker.mixin import ( + ConfigFromEventMixin, + GetIssueMixin, + PackitAPIWithDownstreamMixin, +) from packit_service.worker.result import TaskResults logger = logging.getLogger(__name__) diff --git a/packit_service/worker/handlers/koji.py b/packit_service/worker/handlers/koji.py index 50624d8fd..b9d8f90a1 100644 --- a/packit_service/worker/handlers/koji.py +++ b/packit_service/worker/handlers/koji.py @@ -6,28 +6,24 @@ """ import logging -from os import getenv from datetime import datetime +from os import getenv from typing import Optional from celery import signature - from ogr.abstract import GitProject from packit.config import ( JobConfig, - JobType, JobConfigTriggerType, + JobType, ) from packit.config.package_config import PackageConfig from packit.constants import DISTGIT_INSTANCES + from packit_service.config import PackageConfigGetter from packit_service.constants import ( KojiBuildState, -) -from packit_service.constants import KojiTaskState -from packit_service.utils import ( - dump_job_config, - dump_package_config, + KojiTaskState, ) from packit_service.models import ( AbstractProjectObjectDbType, @@ -37,13 +33,18 @@ from packit_service.service.urls import ( get_koji_build_info_url, ) +from packit_service.utils import ( + dump_job_config, + dump_package_config, +) from packit_service.worker.checker.abstract import Checker from packit_service.worker.checker.koji import ( - PermissionOnKoji, IsJobConfigTriggerMatching, + PermissionOnKoji, SidetagExists, ) from packit_service.worker.events import ( + AbstractPRCommentEvent, CheckRerunCommitEvent, CheckRerunPullRequestEvent, CheckRerunReleaseEvent, @@ -53,7 +54,6 @@ PushGitHubEvent, PushGitlabEvent, ReleaseEvent, - AbstractPRCommentEvent, ReleaseGitlabEvent, ) from packit_service.worker.events.koji import KojiBuildEvent, KojiBuildTagEvent @@ -65,13 +65,15 @@ run_for_check_rerun, run_for_comment, ) -from packit_service.worker.handlers.distgit import DownstreamKojiBuildHandler from packit_service.worker.handlers.bodhi import BodhiUpdateFromSidetagHandler +from packit_service.worker.handlers.distgit import DownstreamKojiBuildHandler from packit_service.worker.handlers.mixin import GetKojiBuildJobHelperMixin -from packit_service.worker.helpers.sidetag import SidetagHelper from packit_service.worker.helpers.build.koji_build import KojiBuildJobHelper -from packit_service.worker.mixin import ConfigFromEventMixin -from packit_service.worker.mixin import PackitAPIWithDownstreamMixin +from packit_service.worker.helpers.sidetag import SidetagHelper +from packit_service.worker.mixin import ( + ConfigFromEventMixin, + PackitAPIWithDownstreamMixin, +) from packit_service.worker.reporting import BaseCommitStatus from packit_service.worker.result import TaskResults diff --git a/packit_service/worker/handlers/mixin.py b/packit_service/worker/handlers/mixin.py index dcd42cbf3..e2777cfe2 100644 --- a/packit_service/worker/handlers/mixin.py +++ b/packit_service/worker/handlers/mixin.py @@ -3,38 +3,38 @@ import logging from abc import abstractmethod -from typing import Any, Optional, Protocol, Union from collections.abc import Iterator from dataclasses import dataclass +from typing import Any, Optional, Protocol, Union + +from packit.config import JobConfig, PackageConfig from packit.exceptions import PackitException -from packit.config import PackageConfig, JobConfig from packit.utils.koji_helper import KojiHelper from packit.vm_image_build import ImageBuilder -from packit_service.utils import get_packit_commands_from_comment + from packit_service.config import ProjectToSync from packit_service.constants import COPR_SRPM_CHROOT, KojiBuildState from packit_service.models import ( - ProjectEventModel, + BuildStatus, CoprBuildTargetModel, + ProjectEventModel, SRPMBuildModel, - BuildStatus, ) -from packit_service.worker.events.event import EventData +from packit_service.utils import get_packit_commands_from_comment from packit_service.worker.events.copr import AbstractCoprBuildEvent +from packit_service.worker.events.event import EventData from packit_service.worker.events.github import PullRequestCommentGithubEvent from packit_service.worker.events.gitlab import MergeRequestCommentGitlabEvent +from packit_service.worker.events.koji import KojiBuildEvent, KojiBuildTagEvent from packit_service.worker.events.pagure import PullRequestCommentPagureEvent from packit_service.worker.handlers.abstract import CeleryTask -from packit_service.worker.helpers.sidetag import SidetagHelper, Sidetag from packit_service.worker.helpers.build.copr_build import CoprBuildJobHelper from packit_service.worker.helpers.build.koji_build import KojiBuildJobHelper +from packit_service.worker.helpers.sidetag import Sidetag, SidetagHelper from packit_service.worker.helpers.testing_farm import TestingFarmJobHelper - from packit_service.worker.mixin import Config, ConfigFromEventMixin, GetBranches -from packit_service.worker.events.koji import KojiBuildEvent, KojiBuildTagEvent from packit_service.worker.monitoring import Pushgateway - logger = logging.getLogger(__name__) diff --git a/packit_service/worker/handlers/open_scan_hub.py b/packit_service/worker/handlers/open_scan_hub.py index 791b5b5f5..ba63fa978 100644 --- a/packit_service/worker/handlers/open_scan_hub.py +++ b/packit_service/worker/handlers/open_scan_hub.py @@ -2,15 +2,18 @@ # SPDX-License-Identifier: MIT import logging -from typing import Tuple, Type, Union +from typing import Union from packit.config import ( JobType, ) + +from packit_service.models import OSHScanStatus from packit_service.worker.checker.abstract import Checker +from packit_service.worker.checker.open_scan_hub import RawhideX86Target from packit_service.worker.events import ( - OpenScanHubTaskStartedEvent, OpenScanHubTaskFinishedEvent, + OpenScanHubTaskStartedEvent, ) from packit_service.worker.handlers.abstract import ( RetriableJobHandler, @@ -18,21 +21,17 @@ configured_as, reacts_to, ) -from packit_service.worker.helpers.build import CoprBuildJobHelper -from packit_service.worker.helpers.open_scan_hub import OpenScanHubHelper - from packit_service.worker.handlers.mixin import ( ConfigFromEventMixin, ) -from packit_service.worker.result import TaskResults +from packit_service.worker.helpers.build import CoprBuildJobHelper +from packit_service.worker.helpers.open_scan_hub import OpenScanHubHelper from packit_service.worker.mixin import ( LocalProjectMixin, PackitAPIWithUpstreamMixin, ) -from packit_service.worker.checker.open_scan_hub import RawhideX86Target - from packit_service.worker.reporting import BaseCommitStatus -from packit_service.models import OSHScanStatus +from packit_service.worker.result import TaskResults logger = logging.getLogger(__name__) @@ -51,7 +50,7 @@ def __init__(self, **kwargs): ] = self.data.to_event() @staticmethod - def get_checkers() -> Tuple[Type[Checker], ...]: + def get_checkers() -> tuple[type[Checker], ...]: return (RawhideX86Target,) def get_helper(self) -> OpenScanHubHelper: @@ -66,7 +65,8 @@ def get_helper(self) -> OpenScanHubHelper: ) scan_helper = OpenScanHubHelper( - copr_build_helper=build_helper, build=self.event.build + copr_build_helper=build_helper, + build=self.event.build, ) return scan_helper @@ -76,7 +76,7 @@ def check_scan_and_build(self): return TaskResults( success=True, details={ - "msg": f"Scan {task_id} not found or not associated with a Copr build" + "msg": f"Scan {task_id} not found or not associated with a Copr build", }, ) elif not self.job_config: @@ -86,7 +86,7 @@ def check_scan_and_build(self): "msg": ( "No job configuration found for OpenScanHub task" f" in {self.project.repo}" - ) + ), }, ) diff --git a/packit_service/worker/handlers/testing_farm.py b/packit_service/worker/handlers/testing_farm.py index 2a892cb69..e532bf7eb 100644 --- a/packit_service/worker/handlers/testing_farm.py +++ b/packit_service/worker/handlers/testing_farm.py @@ -9,59 +9,59 @@ from typing import Optional from celery import Task - from packit.config import JobConfig, JobType from packit.config.package_config import PackageConfig + from packit_service.models import ( - ProjectEventModel, - TFTTestRunTargetModel, - CoprBuildTargetModel, BuildStatus, - TestingFarmResult, + CoprBuildTargetModel, PipelineModel, + ProjectEventModel, + TestingFarmResult, TFTTestRunGroupModel, + TFTTestRunTargetModel, ) from packit_service.service.urls import ( - get_testing_farm_info_url, get_copr_build_info_url, + get_testing_farm_info_url, ) from packit_service.utils import elapsed_seconds from packit_service.worker.checker.abstract import Checker from packit_service.worker.checker.testing_farm import ( CanActorRunJob, + IsCoprBuildDefined, IsEventForJob, IsEventOk, - IsJobConfigTriggerMatching, - IsCoprBuildDefined, IsIdentifierFromCommentMatching, + IsJobConfigTriggerMatching, IsLabelFromCommentMatching, ) from packit_service.worker.events import ( - TestingFarmResultsEvent, + AbstractPRCommentEvent, CheckRerunCommitEvent, CheckRerunPullRequestEvent, + MergeRequestGitlabEvent, PullRequestGithubEvent, PushGitHubEvent, PushGitlabEvent, - MergeRequestGitlabEvent, - AbstractPRCommentEvent, ReleaseEvent, ReleaseGitlabEvent, + TestingFarmResultsEvent, ) from packit_service.worker.handlers import JobHandler from packit_service.worker.handlers.abstract import ( + RetriableJobHandler, TaskName, configured_as, reacts_to, - run_for_comment, run_for_check_rerun, - RetriableJobHandler, + run_for_comment, ) from packit_service.worker.handlers.mixin import ( GetCoprBuildMixin, + GetGithubCommentEventMixin, GetTestingFarmJobHelperMixin, ) -from packit_service.worker.handlers.mixin import GetGithubCommentEventMixin from packit_service.worker.helpers.testing_farm import TestingFarmJobHelper from packit_service.worker.mixin import PackitAPIWithDownstreamMixin from packit_service.worker.reporting import BaseCommitStatus diff --git a/packit_service/worker/handlers/usage.py b/packit_service/worker/handlers/usage.py index 57ec026ef..54084ec19 100644 --- a/packit_service/worker/handlers/usage.py +++ b/packit_service/worker/handlers/usage.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: MIT from ogr.abstract import PRStatus + from packit_service.config import ServiceConfig from packit_service.models import GitProjectModel diff --git a/packit_service/worker/handlers/vm_image.py b/packit_service/worker/handlers/vm_image.py index e92d1248a..f38b7a495 100644 --- a/packit_service/worker/handlers/vm_image.py +++ b/packit_service/worker/handlers/vm_image.py @@ -10,7 +10,19 @@ from packit.config import ( JobType, ) + +from packit_service.celerizer import celery_app +from packit_service.models import ( + PipelineModel, + VMImageBuildStatus, + VMImageBuildTargetModel, +) from packit_service.worker.checker.abstract import Checker +from packit_service.worker.checker.vm_image import ( + GetVMImageBuildReporterFromJobHelperMixin, + HasAuthorWriteAccess, + IsCoprBuildForChrootOk, +) from packit_service.worker.events import ( AbstractPRCommentEvent, VMImageBuildResultEvent, @@ -23,25 +35,13 @@ reacts_to, run_for_comment, ) -from packit_service.worker.result import TaskResults -from packit_service.worker.checker.vm_image import ( - HasAuthorWriteAccess, - IsCoprBuildForChrootOk, - GetVMImageBuildReporterFromJobHelperMixin, -) -from packit_service.worker.mixin import ( - PackitAPIWithDownstreamMixin, -) from packit_service.worker.handlers.mixin import ( GetVMImageBuilderMixin, ) -from packit_service.models import ( - VMImageBuildTargetModel, - VMImageBuildStatus, - PipelineModel, +from packit_service.worker.mixin import ( + PackitAPIWithDownstreamMixin, ) - -from packit_service.celerizer import celery_app +from packit_service.worker.result import TaskResults logger = logging.getLogger(__name__) diff --git a/packit_service/worker/helpers/job_helper.py b/packit_service/worker/helpers/job_helper.py index e67b97753..922e5268d 100644 --- a/packit_service/worker/helpers/job_helper.py +++ b/packit_service/worker/helpers/job_helper.py @@ -3,7 +3,7 @@ import logging from functools import partial -from typing import Optional, Union, Callable +from typing import Callable, Optional, Union from lazy_object_proxy import Proxy from ogr.abstract import GitProject, PullRequest @@ -13,21 +13,22 @@ from packit.config import JobConfig from packit.config.package_config import PackageConfig from packit.local_project import ( - LocalProject, - LocalProjectBuilder, CALCULATE, NOT_TO_CALCULATE, + LocalProject, + LocalProjectBuilder, ) from packit.utils.repo import RepositoryCache + from packit_service.config import Deployment, ServiceConfig from packit_service.models import ( + AbstractProjectObjectDbType, PipelineModel, ProjectEventModel, - AbstractProjectObjectDbType, ) from packit_service.worker.events import EventData from packit_service.worker.monitoring import Pushgateway -from packit_service.worker.reporting import StatusReporter, BaseCommitStatus +from packit_service.worker.reporting import BaseCommitStatus, StatusReporter logger = logging.getLogger(__name__) diff --git a/packit_service/worker/helpers/open_scan_hub.py b/packit_service/worker/helpers/open_scan_hub.py index 567e4f0f3..9ea66def6 100644 --- a/packit_service/worker/helpers/open_scan_hub.py +++ b/packit_service/worker/helpers/open_scan_hub.py @@ -8,20 +8,20 @@ from os import getenv from os.path import basename from pathlib import Path -from typing import Optional, Dict - +from typing import Optional from packit.config import ( JobConfig, + JobConfigTriggerType, JobType, ) -from packit.config import JobConfigTriggerType + from packit_service.constants import ( OPEN_SCAN_HUB_FEATURE_DESCRIPTION, ) from packit_service.models import ( - CoprBuildTargetModel, BuildStatus, + CoprBuildTargetModel, SRPMBuildModel, ) from packit_service.service.urls import get_copr_build_info_url @@ -36,7 +36,9 @@ class OpenScanHubHelper: def __init__( - self, copr_build_helper: CoprBuildJobHelper, build: CoprBuildTargetModel + self, + copr_build_helper: CoprBuildJobHelper, + build: CoprBuildTargetModel, ): self.build = build self.copr_build_helper = copr_build_helper @@ -99,7 +101,7 @@ def handle_scan(self): scan = self.build.add_scan(task_id=id) else: logger.debug( - "It was not possible to get the Open Scan Hub task_id from the response." + "It was not possible to get the Open Scan Hub task_id from the response.", ) if not (url := response_dict.get("url")): @@ -121,7 +123,7 @@ def report( state: BaseCommitStatus, description: str, url: str, - links_to_external_services: Optional[Dict[str, str]] = None, + links_to_external_services: Optional[dict[str, str]] = None, ): self.copr_build_helper._report( state=state, @@ -173,7 +175,8 @@ def find_base_build_job(self) -> Optional[JobConfig]: return base_build_job def get_base_srpm_model( - self, base_build_job: JobConfig + self, + base_build_job: JobConfig, ) -> Optional[SRPMBuildModel]: """ Get the SRPM build model of the latest successful Copr build @@ -183,13 +186,13 @@ def get_base_srpm_model( self.copr_build_helper.job_project_for_commit_job_config(base_build_job) ) base_build_owner = self.copr_build_helper.job_owner_for_job_config( - base_build_job + base_build_job, ) def get_srpm_build(commit_sha): logger.debug( f"Searching for base build for {target_branch_commit} commit " - f"in {base_build_owner}/{base_build_project_name} Copr project in our DB. " + f"in {base_build_owner}/{base_build_project_name} Copr project in our DB. ", ) builds = CoprBuildTargetModel.get_all_by( @@ -212,7 +215,7 @@ def get_srpm_build(commit_sha): return srpm_build for target_branch_commit in self.copr_build_helper.project.get_commits( - self.copr_build_helper.pull_request_object.target_branch + self.copr_build_helper.pull_request_object.target_branch, )[1:]: if srpm_build := get_srpm_build(target_branch_commit): return srpm_build diff --git a/packit_service/worker/helpers/sidetag.py b/packit_service/worker/helpers/sidetag.py index 27f0652c9..622f5cc36 100644 --- a/packit_service/worker/helpers/sidetag.py +++ b/packit_service/worker/helpers/sidetag.py @@ -7,7 +7,8 @@ from packit.exceptions import PackitException from packit.utils.koji_helper import KojiHelper from specfile.utils import NEVR -from packit_service.models import SidetagModel, SidetagGroupModel + +from packit_service.models import SidetagGroupModel, SidetagModel logger = logging.getLogger(__name__) diff --git a/packit_service/worker/helpers/sync_release/propose_downstream.py b/packit_service/worker/helpers/sync_release/propose_downstream.py index dffec9d2e..5d1b61bed 100644 --- a/packit_service/worker/helpers/sync_release/propose_downstream.py +++ b/packit_service/worker/helpers/sync_release/propose_downstream.py @@ -2,11 +2,11 @@ # SPDX-License-Identifier: MIT import logging -from typing import Optional, Callable +from typing import Callable, Optional from ogr.abstract import GitProject +from packit.config import JobConfig, JobType, PackageConfig -from packit.config import JobType, PackageConfig, JobConfig from packit_service.config import ServiceConfig from packit_service.models import ProjectEventModel from packit_service.worker.events import EventData diff --git a/packit_service/worker/helpers/sync_release/pull_from_upstream.py b/packit_service/worker/helpers/sync_release/pull_from_upstream.py index ab2b5ee62..43320c3fb 100644 --- a/packit_service/worker/helpers/sync_release/pull_from_upstream.py +++ b/packit_service/worker/helpers/sync_release/pull_from_upstream.py @@ -5,13 +5,13 @@ from typing import Optional from ogr.abstract import GitProject +from packit.config import JobConfig, JobType, PackageConfig -from packit.config import JobType, PackageConfig, JobConfig from packit_service.config import ServiceConfig from packit_service.models import ProjectEventModel from packit_service.worker.events import EventData -from packit_service.worker.events.pagure import PullRequestCommentPagureEvent from packit_service.worker.events.new_hotness import NewHotnessUpdateEvent +from packit_service.worker.events.pagure import PullRequestCommentPagureEvent from packit_service.worker.helpers.sync_release.sync_release import SyncReleaseHelper logger = logging.getLogger(__name__) diff --git a/packit_service/worker/helpers/sync_release/sync_release.py b/packit_service/worker/helpers/sync_release/sync_release.py index decc04546..b6d26625e 100644 --- a/packit_service/worker/helpers/sync_release/sync_release.py +++ b/packit_service/worker/helpers/sync_release/sync_release.py @@ -5,9 +5,14 @@ from typing import Optional from ogr.abstract import GitProject +from packit.config import ( + JobConfig, + JobConfigTriggerType, + JobType, + PackageConfig, + aliases, +) -from packit.config import JobType, PackageConfig, JobConfig, JobConfigTriggerType -from packit.config import aliases from packit_service.config import ServiceConfig from packit_service.models import ProjectEventModel from packit_service.trigger_mapping import are_job_types_same diff --git a/packit_service/worker/helpers/testing_farm.py b/packit_service/worker/helpers/testing_farm.py index f1055d41e..26696288c 100644 --- a/packit_service/worker/helpers/testing_farm.py +++ b/packit_service/worker/helpers/testing_farm.py @@ -3,37 +3,37 @@ import argparse import logging import re -from re import Pattern import shlex -from typing import Any, Optional, Union, Callable +from re import Pattern +from typing import Any, Callable, Optional, Union import requests - from ogr.abstract import GitProject from ogr.utils import RequestResponse from packit.config import JobConfig, PackageConfig +from packit.constants import HTTP_REQUEST_TIMEOUT from packit.exceptions import PackitConfigException, PackitException from packit.utils import nested_get -from packit.constants import HTTP_REQUEST_TIMEOUT + from packit_service.config import ServiceConfig from packit_service.constants import ( - CONTACTS_URL, - TESTING_FARM_INSTALLABILITY_TEST_URL, - TESTING_FARM_INSTALLABILITY_TEST_REF, - TESTING_FARM_EXTRA_PARAM_MERGED_SUBTREES, BASE_RETRY_INTERVAL_IN_MINUTES_FOR_OUTAGES, - PUBLIC_TF_ARCHITECTURE_LIST, + CONTACTS_URL, INTERNAL_TF_ARCHITECTURE_LIST, + PUBLIC_TF_ARCHITECTURE_LIST, TESTING_FARM_ARTIFACTS_KEY, + TESTING_FARM_EXTRA_PARAM_MERGED_SUBTREES, + TESTING_FARM_INSTALLABILITY_TEST_REF, + TESTING_FARM_INSTALLABILITY_TEST_URL, ) from packit_service.models import ( + BuildStatus, CoprBuildTargetModel, - TFTTestRunTargetModel, - TestingFarmResult, + ProjectEventModel, PullRequestModel, + TestingFarmResult, + TFTTestRunTargetModel, filter_most_recent_target_models_by_status, - BuildStatus, - ProjectEventModel, ) from packit_service.sentry_integration import send_to_sentry from packit_service.service.urls import get_testing_farm_info_url @@ -41,13 +41,13 @@ from packit_service.worker.celery_task import CeleryTask from packit_service.worker.events import ( EventData, - PullRequestCommentGithubEvent, MergeRequestCommentGitlabEvent, + MergeRequestGitlabEvent, + PullRequestCommentGithubEvent, PullRequestCommentPagureEvent, + PullRequestGithubEvent, PushGitHubEvent, PushGitlabEvent, - PullRequestGithubEvent, - MergeRequestGitlabEvent, ) from packit_service.worker.helpers.build import CoprBuildJobHelper from packit_service.worker.reporting import BaseCommitStatus diff --git a/packit_service/worker/jobs.py b/packit_service/worker/jobs.py index 06dd9edb7..87097b2ba 100644 --- a/packit_service/worker/jobs.py +++ b/packit_service/worker/jobs.py @@ -8,34 +8,34 @@ from datetime import datetime from functools import cached_property from re import match -from typing import Optional, Union, Callable +from typing import Callable, Optional, Union import celery - from ogr.exceptions import GithubAppNotInstalledError -from packit.config import JobConfig, JobConfigView, JobType, JobConfigTriggerType +from packit.config import JobConfig, JobConfigTriggerType, JobConfigView, JobType from packit.config.job_config import DEPRECATED_JOB_TYPES from packit.utils import nested_get + from packit_service.config import PackageConfig, PackageConfigGetter, ServiceConfig from packit_service.constants import ( - DOCS_CONFIGURATION_URL, - TASK_ACCEPTED, COMMENT_REACTION, + DOCS_CONFIGURATION_URL, PACKIT_VERIFY_FAS_COMMAND, + TASK_ACCEPTED, ) from packit_service.utils import ( - get_packit_commands_from_comment, elapsed_seconds, + get_packit_commands_from_comment, pr_labels_match_configuration, ) from packit_service.worker.allowlist import Allowlist from packit_service.worker.events import ( + CheckRerunEvent, Event, EventData, - PullRequestCommentPagureEvent, InstallationEvent, - CheckRerunEvent, IssueCommentEvent, + PullRequestCommentPagureEvent, ) from packit_service.worker.events.comment import ( AbstractCommentEvent, @@ -43,8 +43,8 @@ AbstractPRCommentEvent, ) from packit_service.worker.events.event import ( - AbstractResultEvent, AbstractForgeIndependentEvent, + AbstractResultEvent, ) from packit_service.worker.events.koji import KojiBuildTagEvent from packit_service.worker.handlers import ( @@ -52,31 +52,31 @@ GithubAppInstallationHandler, GithubFasVerificationHandler, KojiBuildHandler, - TestingFarmHandler, ProposeDownstreamHandler, + TestingFarmHandler, ) from packit_service.worker.handlers.abstract import ( - JobHandler, + MAP_CHECK_PREFIX_TO_HANDLER, MAP_COMMENT_TO_HANDLER, MAP_JOB_TYPE_TO_HANDLER, MAP_REQUIRED_JOB_TYPE_TO_HANDLER, SUPPORTED_EVENTS_FOR_HANDLER, - MAP_CHECK_PREFIX_TO_HANDLER, + JobHandler, ) from packit_service.worker.handlers.bodhi import ( BodhiUpdateHandler, RetriggerBodhiUpdateHandler, ) from packit_service.worker.handlers.distgit import ( - PullFromUpstreamHandler, DownstreamKojiBuildHandler, + PullFromUpstreamHandler, RetriggerDownstreamKojiBuildHandler, TagIntoSidetagHandler, ) from packit_service.worker.helpers.build import ( + BaseBuildJobHelper, CoprBuildJobHelper, KojiBuildJobHelper, - BaseBuildJobHelper, ) from packit_service.worker.helpers.sync_release.propose_downstream import ( ProposeDownstreamJobHelper, diff --git a/packit_service/worker/mixin.py b/packit_service/worker/mixin.py index e5dfc0a34..395452690 100644 --- a/packit_service/worker/mixin.py +++ b/packit_service/worker/mixin.py @@ -1,33 +1,28 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT -from abc import abstractmethod import logging import re +from abc import abstractmethod from pathlib import Path from typing import Optional, Protocol, Union from fasjson_client import Client from fasjson_client.errors import APIError - -from ogr.abstract import Issue - +from ogr.abstract import GitProject, Issue, PullRequest from packit.api import PackitAPI -from packit.local_project import LocalProject, LocalProjectBuilder, CALCULATE +from packit.local_project import CALCULATE, LocalProject, LocalProjectBuilder from packit.utils.repo import RepositoryCache -from ogr.abstract import GitProject, PullRequest - from packit_service.config import ServiceConfig -from packit_service.worker.reporting import BaseCommitStatus -from packit_service.worker.events import EventData -from packit_service.worker.helpers.job_helper import BaseJobHelper - from packit_service.constants import ( FASJSON_URL, - SANDCASTLE_LOCAL_PROJECT_DIR, SANDCASTLE_DG_REPO_DIR, + SANDCASTLE_LOCAL_PROJECT_DIR, ) +from packit_service.worker.events import EventData +from packit_service.worker.helpers.job_helper import BaseJobHelper +from packit_service.worker.reporting import BaseCommitStatus logger = logging.getLogger(__name__) diff --git a/packit_service/worker/monitoring.py b/packit_service/worker/monitoring.py index c27e9936c..9ecfa48f9 100644 --- a/packit_service/worker/monitoring.py +++ b/packit_service/worker/monitoring.py @@ -4,7 +4,7 @@ import logging import os -from prometheus_client import CollectorRegistry, Counter, push_to_gateway, Histogram +from prometheus_client import CollectorRegistry, Counter, Histogram, push_to_gateway logger = logging.getLogger(__name__) diff --git a/packit_service/worker/parser.py b/packit_service/worker/parser.py index cf359b6e4..c597a5aa0 100644 --- a/packit_service/worker/parser.py +++ b/packit_service/worker/parser.py @@ -7,54 +7,54 @@ import logging from datetime import datetime, timezone from os import getenv -from typing import Optional, Union, Any +from typing import Any, Optional, Union from ogr.parsing import parse_git_repo from packit.config import JobConfigTriggerType - from packit.constants import DISTGIT_INSTANCES from packit.utils import nested_get -from packit_service.config import ServiceConfig, Deployment + +from packit_service.config import Deployment, ServiceConfig from packit_service.constants import ( + TESTING_FARM_INSTALLABILITY_TEST_URL, KojiBuildState, KojiTaskState, - TESTING_FARM_INSTALLABILITY_TEST_URL, ) from packit_service.models import ( - TFTTestRunTargetModel, - TestingFarmResult, - ProjectReleaseModel, GitBranchModel, - PullRequestModel, ProjectEventModel, + ProjectReleaseModel, + PullRequestModel, + TestingFarmResult, + TFTTestRunTargetModel, ) from packit_service.worker.events import ( AbstractCoprBuildEvent, - KojiTaskEvent, - CoprBuildStartEvent, + CheckRerunCommitEvent, + CheckRerunPullRequestEvent, + CheckRerunReleaseEvent, CoprBuildEndEvent, - PushPagureEvent, + CoprBuildStartEvent, + InstallationEvent, + IssueCommentEvent, IssueCommentGitlabEvent, + KojiTaskEvent, MergeRequestCommentGitlabEvent, MergeRequestGitlabEvent, - PushGitlabEvent, - InstallationEvent, - IssueCommentEvent, + OpenScanHubTaskFinishedEvent, + OpenScanHubTaskStartedEvent, + PipelineGitlabEvent, PullRequestCommentGithubEvent, + PullRequestCommentPagureEvent, PullRequestGithubEvent, PushGitHubEvent, + PushGitlabEvent, + PushPagureEvent, ReleaseEvent, - TestingFarmResultsEvent, - PullRequestCommentPagureEvent, - PipelineGitlabEvent, - CheckRerunCommitEvent, - CheckRerunPullRequestEvent, - CheckRerunReleaseEvent, ReleaseGitlabEvent, TagPushGitlabEvent, + TestingFarmResultsEvent, VMImageBuildResultEvent, - OpenScanHubTaskFinishedEvent, - OpenScanHubTaskStartedEvent, ) from packit_service.worker.events.enums import ( GitlabEventAction, @@ -1709,7 +1709,7 @@ def parse_openscanhub_task_finished_event( logger.warning( "OpenScanHub task.finished is missing association with build. " "Package config can not be resolved without it. " - "Skipping the event." + "Skipping the event.", ) return None return event @@ -1730,7 +1730,7 @@ def parse_openscanhub_task_started_event( logger.warning( "OpenScanHub task.started is missing association with build. " "Package config can not be resolved without it. " - "Skipping the event." + "Skipping the event.", ) return None return event diff --git a/packit_service/worker/reporting/reporters/base.py b/packit_service/worker/reporting/reporters/base.py index 711768de9..ec55c5afc 100644 --- a/packit_service/worker/reporting/reporters/base.py +++ b/packit_service/worker/reporting/reporters/base.py @@ -3,20 +3,20 @@ import logging from datetime import datetime, timezone -from typing import Optional, Union, Callable - -from packit_service.worker.reporting.enums import ( - BaseCommitStatus, - MAP_TO_COMMIT_STATUS, - MAP_TO_CHECK_RUN, - DuplicateCheckMode, -) +from typing import Callable, Optional, Union from ogr.abstract import GitProject, PullRequest from ogr.services.github import GithubProject from ogr.services.gitlab import GitlabProject from ogr.services.pagure import PagureProject +from packit_service.worker.reporting.enums import ( + MAP_TO_CHECK_RUN, + MAP_TO_COMMIT_STATUS, + BaseCommitStatus, + DuplicateCheckMode, +) + logger = logging.getLogger(__name__) diff --git a/packit_service/worker/reporting/reporters/github.py b/packit_service/worker/reporting/reporters/github.py index 54458e576..b2ebbb8ba 100644 --- a/packit_service/worker/reporting/reporters/github.py +++ b/packit_service/worker/reporting/reporters/github.py @@ -4,19 +4,20 @@ import logging from typing import Optional -from .base import StatusReporter -from packit_service.worker.reporting.news import News -from packit_service.worker.reporting.enums import BaseCommitStatus - from ogr.abstract import CommitStatus from ogr.exceptions import GithubAPIException from ogr.services.github import GithubProject from ogr.services.github.check_run import ( - create_github_check_run_output, GithubCheckRunResult, GithubCheckRunStatus, + create_github_check_run_output, ) + from packit_service.constants import DOCS_URL, MSG_TABLE_HEADER_WITH_DETAILS +from packit_service.worker.reporting.enums import BaseCommitStatus +from packit_service.worker.reporting.news import News + +from .base import StatusReporter logger = logging.getLogger(__name__) diff --git a/packit_service/worker/reporting/reporters/gitlab.py b/packit_service/worker/reporting/reporters/gitlab.py index 847c97c73..42810d47d 100644 --- a/packit_service/worker/reporting/reporters/gitlab.py +++ b/packit_service/worker/reporting/reporters/gitlab.py @@ -4,12 +4,13 @@ import logging from typing import Optional -from .base import StatusReporter -from packit_service.worker.reporting.enums import BaseCommitStatus - from ogr.abstract import CommitStatus from ogr.exceptions import GitlabAPIException +from packit_service.worker.reporting.enums import BaseCommitStatus + +from .base import StatusReporter + logger = logging.getLogger(__name__) diff --git a/packit_service/worker/reporting/reporters/pagure.py b/packit_service/worker/reporting/reporters/pagure.py index 64294a856..1927e9c09 100644 --- a/packit_service/worker/reporting/reporters/pagure.py +++ b/packit_service/worker/reporting/reporters/pagure.py @@ -4,10 +4,11 @@ import logging from typing import Optional -from .base import StatusReporter +from ogr.abstract import CommitStatus + from packit_service.worker.reporting.enums import BaseCommitStatus -from ogr.abstract import CommitStatus +from .base import StatusReporter logger = logging.getLogger(__name__) diff --git a/packit_service/worker/reporting/utils.py b/packit_service/worker/reporting/utils.py index d91611407..b81efbb87 100644 --- a/packit_service/worker/reporting/utils.py +++ b/packit_service/worker/reporting/utils.py @@ -2,9 +2,10 @@ # SPDX-License-Identifier: MIT import logging + from packit.config import JobConfig -from packit_service.config import ServiceConfig, PackageConfigGetter +from packit_service.config import PackageConfigGetter, ServiceConfig logger = logging.getLogger(__name__) diff --git a/packit_service/worker/result.py b/packit_service/worker/result.py index dfcaced6b..ae9906938 100644 --- a/packit_service/worker/result.py +++ b/packit_service/worker/result.py @@ -5,8 +5,8 @@ from packit.config import JobConfig -from packit_service.worker.events import Event from packit_service.utils import dump_job_config, dump_package_config +from packit_service.worker.events import Event class TaskResults(dict): diff --git a/packit_service/worker/tasks.py b/packit_service/worker/tasks.py index be57b2f70..df75bafca 100644 --- a/packit_service/worker/tasks.py +++ b/packit_service/worker/tasks.py @@ -11,17 +11,17 @@ from celery._state import get_current_task from celery.signals import after_setup_logger from ogr import __version__ as ogr_version +from packit import __version__ as packit_version +from packit.exceptions import PackitException from sqlalchemy import __version__ as sqlal_version from syslog_rfc5424_formatter import RFC5424Formatter -from packit import __version__ as packit_version -from packit.exceptions import PackitException from packit_service import __version__ as ps_version from packit_service.celerizer import celery_app from packit_service.constants import ( - DEFAULT_RETRY_LIMIT, - DEFAULT_RETRY_BACKOFF, CELERY_DEFAULT_MAIN_TASK_NAME, + DEFAULT_RETRY_BACKOFF, + DEFAULT_RETRY_LIMIT, USAGE_CURRENT_DATE, USAGE_DATE_IN_THE_PAST, USAGE_DATE_IN_THE_PAST_STR, @@ -31,9 +31,9 @@ USAGE_PAST_YEAR_DATE_STR, ) from packit_service.models import ( - VMImageBuildTargetModel, GitProjectModel, SyncReleaseTargetModel, + VMImageBuildTargetModel, get_usage_data, ) from packit_service.utils import ( @@ -42,37 +42,37 @@ log_package_versions, ) from packit_service.worker.database import ( - discard_old_srpm_build_logs, backup, discard_old_package_configs, + discard_old_srpm_build_logs, ) from packit_service.worker.handlers import ( CoprBuildEndHandler, - CoprBuildStartHandler, - KojiTaskReportHandler, - SyncFromDownstream, CoprBuildHandler, + CoprBuildStartHandler, GithubAppInstallationHandler, KojiBuildHandler, + KojiTaskReportHandler, + OpenScanHubTaskFinishedHandler, + OpenScanHubTaskStartedHandler, ProposeDownstreamHandler, + SyncFromDownstream, TestingFarmHandler, TestingFarmResultsHandler, VMImageBuildHandler, VMImageBuildResultHandler, - OpenScanHubTaskFinishedHandler, - OpenScanHubTaskStartedHandler, ) from packit_service.worker.handlers.abstract import TaskName from packit_service.worker.handlers.bodhi import ( - CreateBodhiUpdateHandler, BodhiUpdateFromSidetagHandler, - RetriggerBodhiUpdateHandler, + CreateBodhiUpdateHandler, IssueCommentRetriggerBodhiUpdateHandler, + RetriggerBodhiUpdateHandler, ) from packit_service.worker.handlers.distgit import ( DownstreamKojiBuildHandler, - RetriggerDownstreamKojiBuildHandler, PullFromUpstreamHandler, + RetriggerDownstreamKojiBuildHandler, TagIntoSidetagHandler, ) from packit_service.worker.handlers.forges import GithubFasVerificationHandler @@ -80,18 +80,17 @@ KojiBuildReportHandler, KojiBuildTagHandler, ) +from packit_service.worker.handlers.usage import check_onboarded_projects from packit_service.worker.helpers.build.babysit import ( check_copr_build, check_pending_copr_builds, check_pending_testing_farm_runs, - update_vm_image_build, check_pending_vm_image_builds, + update_vm_image_build, ) -from packit_service.worker.handlers.usage import check_onboarded_projects from packit_service.worker.jobs import SteveJobs from packit_service.worker.result import TaskResults - logger = logging.getLogger(__name__) @@ -640,7 +639,10 @@ def run_tag_into_sidetag_handler( @celery_app.task(bind=True, name=TaskName.openscanhub_task_finished, base=TaskWithRetry) def run_openscanhub_task_finished_handler( - self, event: dict, package_config: dict, job_config: dict + self, + event: dict, + package_config: dict, + job_config: dict, ): handler = OpenScanHubTaskFinishedHandler( package_config=load_package_config(package_config), @@ -653,7 +655,10 @@ def run_openscanhub_task_finished_handler( @celery_app.task(bind=True, name=TaskName.openscanhub_task_started, base=TaskWithRetry) def run_openscanhub_task_started_handler( - self, event: dict, package_config: dict, job_config: dict + self, + event: dict, + package_config: dict, + job_config: dict, ): handler = OpenScanHubTaskStartedHandler( package_config=load_package_config(package_config), diff --git a/ruff.toml b/ruff.toml index e53246ac9..0174961dd 100644 --- a/ruff.toml +++ b/ruff.toml @@ -4,7 +4,7 @@ select = [ "COM", # flake8-commas # "E", # pycodestyle Error # "F", # Pyflakes - # "I", # isort + "I", # isort # "PERF",# Perflint # "PIE", # flake8-pie # "PT", # flake8-pytest-style, would be nice to enable diff --git a/tests/conftest.py b/tests/conftest.py index 408ca1168..6bae5aa97 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -7,29 +7,29 @@ from pathlib import Path import pytest +from deepdiff import DeepDiff from flexmock import flexmock - from ogr import GithubService, GitlabService, PagureService -from packit.config import JobConfigTriggerType, JobConfig, PackageConfig +from packit.config import JobConfig, JobConfigTriggerType, PackageConfig from packit.config.common_package_config import Deployment + from packit_service.config import ServiceConfig from packit_service.models import ( - ProjectEventModelType, - ProjectEventModel, BuildStatus, + ProjectEventModel, + ProjectEventModelType, PullRequestModel, ) from packit_service.worker.events import ( + MergeRequestGitlabEvent, PullRequestGithubEvent, PushGitHubEvent, - ReleaseEvent, - MergeRequestGitlabEvent, PushPagureEvent, + ReleaseEvent, ) from packit_service.worker.events.koji import KojiBuildEvent from packit_service.worker.parser import Parser -from tests.spellbook import SAVED_HTTPD_REQS, DATA_DIR, load_the_message_from_file -from deepdiff import DeepDiff +from tests.spellbook import DATA_DIR, SAVED_HTTPD_REQS, load_the_message_from_file @pytest.fixture(autouse=True) diff --git a/tests/integration/test_babysit.py b/tests/integration/test_babysit.py index 269a357e5..9585bc6a4 100644 --- a/tests/integration/test_babysit.py +++ b/tests/integration/test_babysit.py @@ -7,8 +7,6 @@ import requests from copr.v3 import Client, CoprNoResultException from flexmock import flexmock - -import packit_service.worker.helpers.build.babysit from packit.config import ( CommonPackageConfig, JobConfig, @@ -17,26 +15,28 @@ PackageConfig, ) from packit.copr_helper import CoprHelper + +import packit_service.worker.helpers.build.babysit from packit_service.models import ( + BuildStatus, CoprBuildTargetModel, - SRPMBuildModel, ProjectEventModelType, - TFTTestRunTargetModel, + SRPMBuildModel, TestingFarmResult, - BuildStatus, + TFTTestRunTargetModel, ) from packit_service.worker.events import AbstractCoprBuildEvent, TestingFarmResultsEvent -from packit_service.worker.helpers.build.babysit import ( - check_copr_build, - update_copr_builds, - check_pending_copr_builds, - check_pending_testing_farm_runs, -) from packit_service.worker.handlers import ( CoprBuildEndHandler, CoprBuildStartHandler, TestingFarmResultsHandler, ) +from packit_service.worker.helpers.build.babysit import ( + check_copr_build, + check_pending_copr_builds, + check_pending_testing_farm_runs, + update_copr_builds, +) def test_check_copr_build_no_build(): diff --git a/tests/integration/test_bodhi_update.py b/tests/integration/test_bodhi_update.py index 78bff39aa..2b9b9e05d 100644 --- a/tests/integration/test_bodhi_update.py +++ b/tests/integration/test_bodhi_update.py @@ -8,44 +8,43 @@ from celery.canvas import Signature, group from celery.exceptions import Retry from flexmock import flexmock - from ogr.services.github import GithubProject -from packit.exceptions import PackitException - from ogr.services.pagure import PagureProject from packit.api import PackitAPI from packit.config import JobConfigTriggerType +from packit.exceptions import PackitException from packit.local_project import LocalProject from packit.utils.koji_helper import KojiHelper -from packit_service.config import ServiceConfig, PackageConfigGetter + +from packit_service.config import PackageConfigGetter, ServiceConfig from packit_service.constants import DEFAULT_RETRY_LIMIT from packit_service.models import ( + BodhiUpdateGroupModel, + BodhiUpdateTargetModel, GitBranchModel, + KojiBuildTagModel, KojiBuildTargetModel, PipelineModel, - BodhiUpdateGroupModel, - BodhiUpdateTargetModel, ProjectEventModel, - KojiBuildTagModel, - SidetagModel, - SidetagGroupModel, ProjectEventModelType, + SidetagGroupModel, + SidetagModel, ) from packit_service.utils import ( - load_job_config, - load_package_config, dump_job_config, dump_package_config, + load_job_config, + load_package_config, ) from packit_service.worker.celery_task import CeleryTask from packit_service.worker.handlers.bodhi import CreateBodhiUpdateHandler from packit_service.worker.jobs import SteveJobs from packit_service.worker.monitoring import Pushgateway from packit_service.worker.tasks import ( + BodhiTaskWithRetry, run_bodhi_update, run_bodhi_update_from_sidetag, run_koji_build_tag_handler, - BodhiTaskWithRetry, ) from tests.spellbook import first_dict_value, get_parameters_from_results diff --git a/tests/integration/test_check_rerun.py b/tests/integration/test_check_rerun.py index ea9e20052..1845f6abd 100644 --- a/tests/integration/test_check_rerun.py +++ b/tests/integration/test_check_rerun.py @@ -8,22 +8,22 @@ from flexmock import flexmock from github.MainClass import Github from ogr.services.github import GithubProject - from packit.config import JobConfigTriggerType from packit.copr_helper import CoprHelper from packit.local_project import LocalProject + from packit_service.constants import ( TASK_ACCEPTED, ) from packit_service.models import ( + BuildStatus, GitBranchModel, ProjectEventModel, ProjectReleaseModel, PullRequestModel, - BuildStatus, + TestingFarmResult, TFTTestRunGroupModel, TFTTestRunTargetModel, - TestingFarmResult, ) from packit_service.worker.handlers import ProposeDownstreamHandler from packit_service.worker.helpers.build import ( @@ -36,8 +36,7 @@ from packit_service.worker.helpers.testing_farm import TestingFarmJobHelper from packit_service.worker.jobs import SteveJobs from packit_service.worker.monitoring import Pushgateway -from packit_service.worker.reporting import BaseCommitStatus -from packit_service.worker.reporting import StatusReporterGithubChecks +from packit_service.worker.reporting import BaseCommitStatus, StatusReporterGithubChecks from packit_service.worker.result import TaskResults from packit_service.worker.tasks import ( run_koji_build_handler, diff --git a/tests/integration/test_database.py b/tests/integration/test_database.py index a4f85f132..ebbe5b995 100644 --- a/tests/integration/test_database.py +++ b/tests/integration/test_database.py @@ -7,7 +7,7 @@ from boto3.s3.transfer import S3Transfer from flexmock import flexmock -from packit_service.models import SRPMBuildModel, ProjectEventModel +from packit_service.models import ProjectEventModel, SRPMBuildModel from packit_service.worker import database diff --git a/tests/integration/test_dg_commit.py b/tests/integration/test_dg_commit.py index 046545f79..a3c5cf0b5 100644 --- a/tests/integration/test_dg_commit.py +++ b/tests/integration/test_dg_commit.py @@ -6,7 +6,6 @@ import pytest from celery.canvas import group from flexmock import flexmock - from ogr.abstract import PRStatus from ogr.services.github import GithubProject from ogr.services.pagure import PagureProject @@ -23,18 +22,19 @@ from packit.local_project import LocalProjectBuilder from packit.utils.koji_helper import KojiHelper from packit.utils.repo import RepositoryCache + from packit_service.config import PackageConfigGetter, ProjectToSync, ServiceConfig from packit_service.constants import DEFAULT_RETRY_LIMIT, SANDCASTLE_WORK_DIR from packit_service.models import ( GitBranchModel, GitProjectModel, - ProjectEventModel, - ProjectEventModelType, KojiBuildGroupModel, - PipelineModel, KojiBuildTargetModel, - SidetagModel, + PipelineModel, + ProjectEventModel, + ProjectEventModelType, SidetagGroupModel, + SidetagModel, ) from packit_service.utils import load_job_config, load_package_config from packit_service.worker.handlers.distgit import DownstreamKojiBuildHandler diff --git a/tests/integration/test_github_fas_verification.py b/tests/integration/test_github_fas_verification.py index c75566cf9..81c0eba6a 100644 --- a/tests/integration/test_github_fas_verification.py +++ b/tests/integration/test_github_fas_verification.py @@ -7,13 +7,13 @@ from celery.canvas import Signature from flexmock import flexmock from ogr.services.github import GithubProject - from packit.config import Deployment -from packit_service.config import ServiceConfig, PackageConfigGetter + +from packit_service.config import PackageConfigGetter, ServiceConfig from packit_service.constants import SANDCASTLE_WORK_DIR from packit_service.models import ( - AllowlistStatus, AllowlistModel, + AllowlistStatus, GithubInstallationModel, ) from packit_service.worker.allowlist import Allowlist diff --git a/tests/integration/test_handler.py b/tests/integration/test_handler.py index b3156aa77..4a251dd81 100644 --- a/tests/integration/test_handler.py +++ b/tests/integration/test_handler.py @@ -5,7 +5,6 @@ import pytest from flexmock import flexmock - from ogr.services.github import GithubProject from packit.config import ( CommonPackageConfig, @@ -14,25 +13,26 @@ JobType, PackageConfig, ) + from packit_service.config import ServiceConfig from packit_service.constants import KOJI_PRODUCTION_BUILDS_ISSUE from packit_service.models import ( GitBranchModel, - PullRequestModel, ProjectEventModel, ProjectEventModelType, -) -from packit_service.worker.mixin import ( - ConfigFromEventMixin, - PackitAPIWithDownstreamMixin, + PullRequestModel, ) from packit_service.worker.handlers import ( - JobHandler, CoprBuildHandler, + JobHandler, KojiBuildHandler, ) from packit_service.worker.helpers.build import CoprBuildJobHelper -from packit_service.worker.reporting import StatusReporterGithubChecks, BaseCommitStatus +from packit_service.worker.mixin import ( + ConfigFromEventMixin, + PackitAPIWithDownstreamMixin, +) +from packit_service.worker.reporting import BaseCommitStatus, StatusReporterGithubChecks @pytest.fixture() diff --git a/tests/integration/test_installation.py b/tests/integration/test_installation.py index 91ad1ae4f..c819aa2be 100644 --- a/tests/integration/test_installation.py +++ b/tests/integration/test_installation.py @@ -7,11 +7,11 @@ from celery.canvas import Signature from flexmock import flexmock -from packit_service.config import ServiceConfig, PackageConfigGetter +from packit_service.config import PackageConfigGetter, ServiceConfig from packit_service.constants import SANDCASTLE_WORK_DIR from packit_service.models import ( - GithubInstallationModel, AllowlistModel, + GithubInstallationModel, ) from packit_service.worker.allowlist import Allowlist from packit_service.worker.jobs import SteveJobs diff --git a/tests/integration/test_issue_comment.py b/tests/integration/test_issue_comment.py index ed847d8ce..dbb6ad0d1 100644 --- a/tests/integration/test_issue_comment.py +++ b/tests/integration/test_issue_comment.py @@ -8,9 +8,7 @@ import pytest from celery.canvas import group from flexmock import flexmock - -from ogr.abstract import GitTag -from ogr.abstract import PRStatus +from ogr.abstract import GitTag, PRStatus from ogr.read_only import PullRequestReadOnly from ogr.services.github import GithubProject, GithubRelease from ogr.services.gitlab import GitlabProject, GitlabRelease @@ -21,23 +19,24 @@ from packit.exceptions import PackitException from packit.local_project import LocalProject, LocalProjectBuilder from packit.utils.koji_helper import KojiHelper -from packit_service.config import ServiceConfig, PackageConfigGetter + +from packit_service.config import PackageConfigGetter, ServiceConfig from packit_service.constants import COMMENT_REACTION, TASK_ACCEPTED from packit_service.models import ( + BodhiUpdateGroupModel, + BodhiUpdateTargetModel, IssueModel, - ProjectEventModelType, - ProjectEventModel, + KojiBuildGroupModel, + KojiBuildTargetModel, PipelineModel, + ProjectEventModel, + ProjectEventModelType, + SyncReleaseJobType, SyncReleaseModel, + SyncReleasePullRequestModel, SyncReleaseStatus, SyncReleaseTargetModel, SyncReleaseTargetStatus, - SyncReleaseJobType, - KojiBuildGroupModel, - KojiBuildTargetModel, - BodhiUpdateGroupModel, - BodhiUpdateTargetModel, - SyncReleasePullRequestModel, ) from packit_service.service.urls import get_propose_downstream_info_url from packit_service.worker.allowlist import Allowlist @@ -54,9 +53,9 @@ from packit_service.worker.monitoring import Pushgateway from packit_service.worker.reporting import BaseCommitStatus from packit_service.worker.tasks import ( + run_issue_comment_retrigger_bodhi_update, run_propose_downstream_handler, run_retrigger_downstream_koji_build, - run_issue_comment_retrigger_bodhi_update, ) from tests.spellbook import DATA_DIR, first_dict_value, get_parameters_from_results diff --git a/tests/integration/test_koji_build.py b/tests/integration/test_koji_build.py index 2505d4f2c..5c058893a 100644 --- a/tests/integration/test_koji_build.py +++ b/tests/integration/test_koji_build.py @@ -6,22 +6,20 @@ import pytest from celery.canvas import group from flexmock import flexmock - from ogr.services.github import GithubProject from ogr.services.pagure import PagureProject from packit.api import PackitAPI from packit.config import JobConfigTriggerType from packit.exceptions import PackitException from packit.utils.koji_helper import KojiHelper + from packit_service.config import PackageConfigGetter from packit_service.models import ( GitBranchModel, + KojiBuildGroupModel, KojiBuildTargetModel, PipelineModel, ProjectEventModel, - KojiBuildGroupModel, -) -from packit_service.models import ( ProjectEventModelType, ) from packit_service.worker.celery_task import CeleryTask diff --git a/tests/integration/test_listen_to_fedmsg.py b/tests/integration/test_listen_to_fedmsg.py index 29a837a92..d86303e70 100644 --- a/tests/integration/test_listen_to_fedmsg.py +++ b/tests/integration/test_listen_to_fedmsg.py @@ -1,17 +1,16 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT -import json import copy +import json from datetime import datetime import pytest import requests -from celery.canvas import group as celery_group, Signature +from celery.canvas import Signature +from celery.canvas import group as celery_group from copr.v3 import Client from flexmock import flexmock - -import packit_service.service.urls as urls from ogr.services.github import GithubProject from ogr.utils import RequestResponse from packit.config import ( @@ -21,36 +20,39 @@ JobType, PackageConfig, ) -from packit.config.requirements import RequirementsConfig, LabelRequirementsConfig +from packit.config.requirements import LabelRequirementsConfig, RequirementsConfig from packit.copr_helper import CoprHelper from packit.local_project import LocalProject from packit.utils.koji_helper import KojiHelper + +import packit_service.service.urls as urls from packit_service.config import PackageConfigGetter, ServiceConfig from packit_service.constants import COPR_API_FAIL_STATE, DEFAULT_RETRY_LIMIT from packit_service.models import ( + BuildStatus, CoprBuildTargetModel, - ProjectEventModelType, + GitBranchModel, KojiBuildTargetModel, - SRPMBuildModel, - TFTTestRunTargetModel, - TFTTestRunGroupModel, - TestingFarmResult, - BuildStatus, + ProjectEventModelType, ProjectReleaseModel, - GitBranchModel, SidetagModel, + SRPMBuildModel, + TestingFarmResult, + TFTTestRunGroupModel, + TFTTestRunTargetModel, ) from packit_service.service.urls import ( get_copr_build_info_url, get_koji_build_info_url, get_srpm_build_info_url, ) -from packit_service.worker.helpers.build.copr_build import CoprBuildJobHelper from packit_service.worker.events import AbstractCoprBuildEvent, KojiTaskEvent from packit_service.worker.events.koji import KojiBuildTagEvent from packit_service.worker.handlers import CoprBuildEndHandler from packit_service.worker.handlers.bodhi import BodhiUpdateFromSidetagHandler from packit_service.worker.handlers.distgit import DownstreamKojiBuildHandler +from packit_service.worker.helpers.build.copr_build import CoprBuildJobHelper +from packit_service.worker.helpers.testing_farm import TestingFarmJobHelper from packit_service.worker.jobs import SteveJobs from packit_service.worker.monitoring import Pushgateway from packit_service.worker.reporting import BaseCommitStatus, StatusReporter @@ -61,7 +63,6 @@ run_koji_build_tag_handler, run_testing_farm_handler, ) -from packit_service.worker.helpers.testing_farm import TestingFarmJobHelper from tests.conftest import copr_build_model from tests.spellbook import DATA_DIR, first_dict_value, get_parameters_from_results diff --git a/tests/integration/test_new_hotness_update.py b/tests/integration/test_new_hotness_update.py index a68311709..9cb9c559c 100644 --- a/tests/integration/test_new_hotness_update.py +++ b/tests/integration/test_new_hotness_update.py @@ -8,27 +8,27 @@ from celery.canvas import group from flexmock import flexmock from github.MainClass import Github - -import packit_service.worker.checker.distgit from packit.api import PackitAPI from packit.config import JobConfigTriggerType from packit.config.aliases import get_branches from packit.distgit import DistGit from packit.local_project import LocalProject, LocalProjectBuilder + +import packit_service.worker.checker.distgit from packit_service.config import ServiceConfig from packit_service.models import ( - ProjectEventModelType, - ProjectEventModel, + AnityaProjectModel, + AnityaVersionModel, PipelineModel, + ProjectEventModel, + ProjectEventModelType, ProjectReleaseModel, - SyncReleaseStatus, + SyncReleaseJobType, SyncReleaseModel, + SyncReleasePullRequestModel, + SyncReleaseStatus, SyncReleaseTargetModel, SyncReleaseTargetStatus, - SyncReleaseJobType, - SyncReleasePullRequestModel, - AnityaVersionModel, - AnityaProjectModel, ) from packit_service.service.db_project_events import AddReleaseEventToDb from packit_service.worker.allowlist import Allowlist @@ -36,7 +36,7 @@ from packit_service.worker.monitoring import Pushgateway from packit_service.worker.reporting.news import DistgitAnnouncement from packit_service.worker.tasks import run_pull_from_upstream_handler -from tests.spellbook import get_parameters_from_results, first_dict_value +from tests.spellbook import first_dict_value, get_parameters_from_results @pytest.fixture(scope="module") diff --git a/tests/integration/test_pr_comment.py b/tests/integration/test_pr_comment.py index 09bee5b96..0cbd90deb 100644 --- a/tests/integration/test_pr_comment.py +++ b/tests/integration/test_pr_comment.py @@ -8,9 +8,6 @@ from celery.canvas import group as celery_group from flexmock import flexmock from github.MainClass import Github - -import packit_service.models -import packit_service.service.urls as urls from ogr.abstract import AuthMethod from ogr.services.github import GithubProject, GithubService from ogr.services.pagure import PagureProject @@ -25,38 +22,41 @@ from packit.local_project import LocalProject, LocalProjectBuilder from packit.upstream import GitUpstream from packit.utils.koji_helper import KojiHelper + +import packit_service.models +import packit_service.service.urls as urls from packit_service.config import ServiceConfig from packit_service.constants import ( COMMENT_REACTION, CONTACTS_URL, - DOCS_HOW_TO_CONFIGURE_URL, - TASK_ACCEPTED, DEFAULT_RETRY_LIMIT, - DOCS_VALIDATE_HOOKS, + DOCS_HOW_TO_CONFIGURE_URL, DOCS_VALIDATE_CONFIG, + DOCS_VALIDATE_HOOKS, + TASK_ACCEPTED, ) from packit_service.models import ( + BodhiUpdateGroupModel, + BodhiUpdateTargetModel, + BuildStatus, CoprBuildTargetModel, KojiBuildGroupModel, KojiBuildTargetModel, + PipelineModel, ProjectEventModel, ProjectEventModelType, - PipelineModel, PullRequestModel, - TFTTestRunTargetModel, - TFTTestRunGroupModel, - TestingFarmResult, - BuildStatus, + SidetagGroupModel, + SidetagModel, + SyncReleaseJobType, SyncReleaseModel, + SyncReleasePullRequestModel, SyncReleaseStatus, SyncReleaseTargetModel, SyncReleaseTargetStatus, - SyncReleaseJobType, - BodhiUpdateGroupModel, - BodhiUpdateTargetModel, - SyncReleasePullRequestModel, - SidetagGroupModel, - SidetagModel, + TestingFarmResult, + TFTTestRunGroupModel, + TFTTestRunTargetModel, ) from packit_service.service.db_project_events import AddPullRequestEventToDb from packit_service.utils import ( @@ -80,17 +80,20 @@ from packit_service.worker.jobs import SteveJobs from packit_service.worker.mixin import PackitAPIWithDownstreamMixin from packit_service.worker.monitoring import Pushgateway -from packit_service.worker.reporting import BaseCommitStatus, StatusReporterGithubChecks -from packit_service.worker.reporting import StatusReporter +from packit_service.worker.reporting import ( + BaseCommitStatus, + StatusReporter, + StatusReporterGithubChecks, +) from packit_service.worker.reporting.news import DistgitAnnouncement from packit_service.worker.result import TaskResults from packit_service.worker.tasks import ( + run_downstream_koji_build, run_koji_build_handler, - run_retrigger_bodhi_update, - run_testing_farm_handler, run_pull_from_upstream_handler, - run_downstream_koji_build, + run_retrigger_bodhi_update, run_tag_into_sidetag_handler, + run_testing_farm_handler, ) from tests.spellbook import DATA_DIR, first_dict_value, get_parameters_from_results diff --git a/tests/integration/test_release_event.py b/tests/integration/test_release_event.py index 8bcf9d8d9..cea46fe07 100644 --- a/tests/integration/test_release_event.py +++ b/tests/integration/test_release_event.py @@ -8,7 +8,6 @@ from celery.canvas import group from flexmock import flexmock from github.MainClass import Github - from packit.api import PackitAPI from packit.config import JobConfigTriggerType from packit.config.aliases import get_branches @@ -16,22 +15,23 @@ from packit.exceptions import PackitDownloadFailedException from packit.local_project import LocalProject, LocalProjectBuilder from packit.pkgtool import PkgTool + from packit_service import sentry_integration from packit_service.config import ServiceConfig from packit_service.constants import ( TASK_ACCEPTED, ) from packit_service.models import ( - ProjectEventModelType, - ProjectEventModel, PipelineModel, + ProjectEventModel, + ProjectEventModelType, ProjectReleaseModel, + SyncReleaseJobType, SyncReleaseModel, + SyncReleasePullRequestModel, SyncReleaseStatus, SyncReleaseTargetModel, SyncReleaseTargetStatus, - SyncReleaseJobType, - SyncReleasePullRequestModel, ) from packit_service.service.db_project_events import AddReleaseEventToDb from packit_service.service.urls import get_propose_downstream_info_url diff --git a/tests/integration/test_vm_image_build.py b/tests/integration/test_vm_image_build.py index db3d9d67b..759b08c12 100644 --- a/tests/integration/test_vm_image_build.py +++ b/tests/integration/test_vm_image_build.py @@ -3,31 +3,29 @@ import json -from flexmock import flexmock - from celery import Celery from celery.canvas import group - +from flexmock import flexmock from ogr.services.github import GithubProject +from packit.copr_helper import CoprHelper -from packit_service.worker.jobs import SteveJobs -from packit_service.worker.monitoring import Pushgateway -from packit_service.worker.tasks import ( - run_vm_image_build, -) from packit_service.models import ( - PullRequestModel, - JobConfigTriggerType, CoprBuildTargetModel, + JobConfigTriggerType, PipelineModel, - VMImageBuildTargetModel, - ProjectEventModelType, ProjectEventModel, + ProjectEventModelType, + PullRequestModel, + VMImageBuildTargetModel, ) from packit_service.worker.allowlist import Allowlist -from tests.spellbook import first_dict_value, get_parameters_from_results from packit_service.worker.handlers.vm_image import VMImageBuildHandler -from packit.copr_helper import CoprHelper +from packit_service.worker.jobs import SteveJobs +from packit_service.worker.monitoring import Pushgateway +from packit_service.worker.tasks import ( + run_vm_image_build, +) +from tests.spellbook import first_dict_value, get_parameters_from_results def test_vm_image_build(github_vm_image_build_comment): diff --git a/tests/spellbook.py b/tests/spellbook.py index 4b11dee03..266386bd4 100644 --- a/tests/spellbook.py +++ b/tests/spellbook.py @@ -8,6 +8,7 @@ from datetime import datetime, timezone from pathlib import Path from typing import Any + from packit_service.worker.result import TaskResults TESTS_DIR = Path(__file__).parent diff --git a/tests/unit/conftest.py b/tests/unit/conftest.py index abf8208ee..0b50eba0b 100644 --- a/tests/unit/conftest.py +++ b/tests/unit/conftest.py @@ -1,15 +1,15 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT +import packit import pytest from flexmock import flexmock +from packit.config.job_config import JobConfigTriggerType, JobType -import packit -from packit.config.job_config import JobType, JobConfigTriggerType from packit_service.models import ( + ProjectEventModel, ProjectEventModelType, PullRequestModel, - ProjectEventModel, ) diff --git a/tests/unit/events/conftest.py b/tests/unit/events/conftest.py index 6b68227aa..9981b9b9d 100644 --- a/tests/unit/events/conftest.py +++ b/tests/unit/events/conftest.py @@ -4,7 +4,6 @@ import pytest from flexmock import flexmock - from ogr import GithubService, GitlabService, PagureService from packit_service.config import ServiceConfig diff --git a/tests/unit/events/test_anitya.py b/tests/unit/events/test_anitya.py index 7802bdf5b..6b42d3d88 100644 --- a/tests/unit/events/test_anitya.py +++ b/tests/unit/events/test_anitya.py @@ -2,16 +2,17 @@ # SPDX-License-Identifier: MIT import json + import pytest from flexmock import flexmock - from ogr.services.gitlab import GitlabProject from ogr.services.pagure import PagureProject + from packit_service.config import PackageConfigGetter from packit_service.models import ( ProjectEventModel, - ProjectReleaseModel, ProjectEventModelType, + ProjectReleaseModel, ) from packit_service.worker.events.new_hotness import ( AnityaVersionUpdateEvent, diff --git a/tests/unit/events/test_copr.py b/tests/unit/events/test_copr.py index 660cdd717..6d88f372a 100644 --- a/tests/unit/events/test_copr.py +++ b/tests/unit/events/test_copr.py @@ -2,11 +2,12 @@ # SPDX-License-Identifier: MIT import json -import pytest from datetime import datetime, timedelta -from flexmock import flexmock +import pytest +from flexmock import flexmock from ogr.services.github import GithubProject + from packit_service.config import PackageConfigGetter from packit_service.models import CoprBuildTargetModel, get_most_recent_targets from packit_service.worker.events.copr import AbstractCoprBuildEvent diff --git a/tests/unit/events/test_github.py b/tests/unit/events/test_github.py index 87dc948cb..19b8ec461 100644 --- a/tests/unit/events/test_github.py +++ b/tests/unit/events/test_github.py @@ -2,10 +2,10 @@ # SPDX-License-Identifier: MIT import json -import pytest from datetime import datetime, timezone -from flexmock import flexmock +import pytest +from flexmock import flexmock from ogr import GithubService from ogr.services.github import GithubProject from packit.config import JobConfigTriggerType diff --git a/tests/unit/events/test_gitlab.py b/tests/unit/events/test_gitlab.py index 9c40fe284..affe4a3af 100644 --- a/tests/unit/events/test_gitlab.py +++ b/tests/unit/events/test_gitlab.py @@ -2,9 +2,9 @@ # SPDX-License-Identifier: MIT import json + import pytest from flexmock import flexmock - from ogr.services.gitlab import GitlabProject from packit_service.config import PackageConfigGetter diff --git a/tests/unit/events/test_koji.py b/tests/unit/events/test_koji.py index f3a1cc902..1bfcaa63f 100644 --- a/tests/unit/events/test_koji.py +++ b/tests/unit/events/test_koji.py @@ -2,16 +2,16 @@ # SPDX-License-Identifier: MIT from flexmock import flexmock - from ogr.services.github import GithubProject from ogr.services.pagure import PagureProject from packit.utils.koji_helper import KojiHelper + from packit_service.constants import KojiBuildState, KojiTaskState from packit_service.models import KojiBuildTargetModel from packit_service.worker.events.koji import ( KojiBuildEvent, - KojiTaskEvent, KojiBuildTagEvent, + KojiTaskEvent, ) from packit_service.worker.parser import Parser diff --git a/tests/unit/events/test_open_scan_hub.py b/tests/unit/events/test_open_scan_hub.py index 135ef3b95..9736a67d1 100644 --- a/tests/unit/events/test_open_scan_hub.py +++ b/tests/unit/events/test_open_scan_hub.py @@ -1,25 +1,25 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT +import datetime import json + import pytest -import datetime from flexmock import flexmock - from packit.config import ( - JobConfig, CommonPackageConfig, - PackageConfig, - JobType, + JobConfig, JobConfigTriggerType, + JobType, + PackageConfig, ) + +from packit_service.models import OSHScanModel from packit_service.worker.events import ( OpenScanHubTaskFinishedEvent, OpenScanHubTaskStartedEvent, ) from packit_service.worker.parser import Parser -from packit_service.models import OSHScanModel - from tests.spellbook import DATA_DIR @@ -61,7 +61,7 @@ def scan_config_and_db(add_pull_request_event_with_sha_123456): .mock() ) flexmock(OpenScanHubTaskFinishedEvent).should_receive( - "get_packages_config" + "get_packages_config", ).and_return( PackageConfig( jobs=[ @@ -71,20 +71,21 @@ def scan_config_and_db(add_pull_request_event_with_sha_123456): packages={ "package": CommonPackageConfig( _targets=["fedora-rawhide-x86_64"], - ) + ), }, - ) + ), ], packages={"package": CommonPackageConfig()}, - ) + ), ) flexmock(OSHScanModel).should_receive("get_by_task_id").and_return( - flexmock(copr_build_target=db_build) + flexmock(copr_build_target=db_build), ) def test_parse_openscanhub_task_finished( - openscanhub_task_finished_event, scan_config_and_db + openscanhub_task_finished_event, + scan_config_and_db, ): event_object = Parser.parse_event(openscanhub_task_finished_event) @@ -109,7 +110,8 @@ def test_parse_openscanhub_task_finished( def test_parse_openscanhub_task_started( - openscanhub_task_started_event, scan_config_and_db + openscanhub_task_started_event, + scan_config_and_db, ): event_object = Parser.parse_event(openscanhub_task_started_event) diff --git a/tests/unit/events/test_pagure.py b/tests/unit/events/test_pagure.py index ebb9e8713..f09e96fb8 100644 --- a/tests/unit/events/test_pagure.py +++ b/tests/unit/events/test_pagure.py @@ -2,10 +2,11 @@ # SPDX-License-Identifier: MIT import json + import pytest from flexmock import flexmock - from ogr.services.pagure import PagureProject + from packit_service.config import PackageConfigGetter from packit_service.worker.events.pagure import ( PullRequestCommentPagureEvent, diff --git a/tests/unit/events/test_testing_farm.py b/tests/unit/events/test_testing_farm.py index 47f7dbf8c..4eb3a5a62 100644 --- a/tests/unit/events/test_testing_farm.py +++ b/tests/unit/events/test_testing_farm.py @@ -2,16 +2,16 @@ # SPDX-License-Identifier: MIT import json -import pytest from datetime import datetime -from flexmock import flexmock +import pytest +from flexmock import flexmock from ogr.services.github import GithubProject from packit_service.models import ( CoprBuildTargetModel, - TFTTestRunTargetModel, TestingFarmResult, + TFTTestRunTargetModel, get_submitted_time_from_model, ) from packit_service.worker.events.testing_farm import TestingFarmResultsEvent diff --git a/tests/unit/test_allowlist.py b/tests/unit/test_allowlist.py index 2cb567ab2..313802784 100644 --- a/tests/unit/test_allowlist.py +++ b/tests/unit/test_allowlist.py @@ -10,36 +10,38 @@ from flexmock import flexmock from ogr.abstract import GitProject, GitService from ogr.services.github import GithubProject, GithubService - from packit.api import PackitAPI -from packit.config import CommonPackageConfig, JobType, JobConfig, JobConfigTriggerType +from packit.config import CommonPackageConfig, JobConfig, JobConfigTriggerType, JobType from packit.copr_helper import CoprHelper from packit.local_project import LocalProject + from packit_service.config import ServiceConfig from packit_service.constants import ( + DENIED_MSG, DOCS_APPROVAL_URL, NOTIFICATION_REPO, - DENIED_MSG, ) from packit_service.models import ( AllowlistModel as DBAllowlist, +) +from packit_service.models import ( AllowlistStatus, ) from packit_service.worker.allowlist import Allowlist from packit_service.worker.events import ( + AbstractGithubEvent, EventData, IssueCommentEvent, PullRequestCommentGithubEvent, PullRequestGithubEvent, ReleaseEvent, - AbstractGithubEvent, ) from packit_service.worker.events.enums import ( + IssueCommentAction, PullRequestAction, PullRequestCommentAction, - IssueCommentAction, ) -from packit_service.worker.reporting import StatusReporter, BaseCommitStatus +from packit_service.worker.reporting import BaseCommitStatus, StatusReporter EXPECTED_TESTING_FARM_CHECK_NAME = "testing-farm:fedora-rawhide-x86_64" diff --git a/tests/unit/test_babysit_vm_image.py b/tests/unit/test_babysit_vm_image.py index 1acb2a87d..16f76fd33 100644 --- a/tests/unit/test_babysit_vm_image.py +++ b/tests/unit/test_babysit_vm_image.py @@ -3,24 +3,23 @@ import datetime import pytest -from flexmock import Mock -from flexmock import flexmock +from flexmock import Mock, flexmock +from packit.config.job_config import JobConfigTriggerType from requests import HTTPError import packit_service -from packit.config.job_config import JobConfigTriggerType from packit_service.config import ServiceConfig from packit_service.models import ( - VMImageBuildTargetModel, - VMImageBuildStatus, ProjectEventModelType, + VMImageBuildStatus, + VMImageBuildTargetModel, ) from packit_service.worker.events import VMImageBuildResultEvent from packit_service.worker.handlers import VMImageBuildResultHandler from packit_service.worker.helpers.build.babysit import ( + UpdateImageBuildHelper, check_pending_vm_image_builds, update_vm_image_build, - UpdateImageBuildHelper, ) from packit_service.worker.monitoring import Pushgateway diff --git a/tests/unit/test_bodhi_update_checks.py b/tests/unit/test_bodhi_update_checks.py index b1498f526..daeae1e89 100644 --- a/tests/unit/test_bodhi_update_checks.py +++ b/tests/unit/test_bodhi_update_checks.py @@ -2,22 +2,21 @@ # SPDX-License-Identifier: MIT import pytest - from flexmock import flexmock - -from packit_service.worker.checker.bodhi import ( - HasIssueCommenterRetriggeringPermissions, - IsAuthorAPackager, -) -from packit_service.worker.mixin import PackitAPIWithDownstreamMixin from packit.config import ( + CommonPackageConfig, JobConfig, JobConfigTriggerType, JobType, PackageConfig, - CommonPackageConfig, ) +from packit_service.worker.checker.bodhi import ( + HasIssueCommenterRetriggeringPermissions, + IsAuthorAPackager, +) +from packit_service.worker.mixin import PackitAPIWithDownstreamMixin + @pytest.mark.parametrize( "event_type, has_write_access, result", diff --git a/tests/unit/test_bodhi_update_error_msgs.py b/tests/unit/test_bodhi_update_error_msgs.py index 7adbafe4e..b4f291157 100644 --- a/tests/unit/test_bodhi_update_error_msgs.py +++ b/tests/unit/test_bodhi_update_error_msgs.py @@ -3,15 +3,15 @@ import pytest from flexmock import flexmock - from packit.config import ( + CommonPackageConfig, JobConfig, JobConfigTriggerType, JobType, PackageConfig, - CommonPackageConfig, ) from packit.exceptions import PackitException + from packit_service.config import ServiceConfig from packit_service.worker.celery_task import CeleryTask from packit_service.worker.events import ( diff --git a/tests/unit/test_build_helper.py b/tests/unit/test_build_helper.py index 3dc58251b..0dd0aa7a3 100644 --- a/tests/unit/test_build_helper.py +++ b/tests/unit/test_build_helper.py @@ -3,7 +3,6 @@ import pytest from flexmock import flexmock - from packit.config import ( CommonPackageConfig, JobConfig, @@ -13,12 +12,13 @@ ) from packit.config.aliases import get_build_targets from packit.config.notifications import ( - NotificationsConfig, FailureCommentNotificationsConfig, + NotificationsConfig, ) from packit.copr_helper import CoprHelper from packit.local_project import LocalProject from packit.utils.repo import RepositoryCache + from packit_service.config import ServiceConfig from packit_service.models import ProjectEventModelType from packit_service.worker.helpers.build.copr_build import CoprBuildJobHelper @@ -26,7 +26,7 @@ # packit.config.aliases.get_aliases() return value example from packit_service.worker.helpers.testing_farm import TestingFarmJobHelper -from packit_service.worker.reporting import StatusReporter, DuplicateCheckMode +from packit_service.worker.reporting import DuplicateCheckMode, StatusReporter ALIASES = { "fedora-development": ["fedora-33", "fedora-rawhide"], diff --git a/tests/unit/test_checkers.py b/tests/unit/test_checkers.py index 986e83438..6d07ae1b1 100644 --- a/tests/unit/test_checkers.py +++ b/tests/unit/test_checkers.py @@ -3,26 +3,28 @@ import pytest from flexmock import flexmock - from ogr import PagureService from ogr.abstract import AccessLevel, PRStatus from ogr.services.pagure import PagureProject from packit.config import ( CommonPackageConfig, - JobType, + JobConfig, JobConfigTriggerType, JobConfigView, - JobConfig, + JobType, PackageConfig, ) from packit.config.commands import TestCommandConfig -from packit.config.requirements import RequirementsConfig, LabelRequirementsConfig +from packit.config.requirements import LabelRequirementsConfig, RequirementsConfig from packit.copr_helper import CoprHelper + from packit_service.config import ServiceConfig from packit_service.models import CoprBuildTargetModel from packit_service.worker.checker.bodhi import IsKojiBuildOwnerMatchingConfiguration from packit_service.worker.checker.copr import ( IsJobConfigTriggerMatching as IsJobConfigTriggerMatchingCopr, +) +from packit_service.worker.checker.copr import ( IsPackageMatchingJobView, ) from packit_service.worker.checker.distgit import ( @@ -37,22 +39,24 @@ PermissionOnKoji, ) from packit_service.worker.checker.testing_farm import ( - IsJobConfigTriggerMatching as IsJobConfigTriggerMatchingTF, IsIdentifierFromCommentMatching, IsLabelFromCommentMatching, ) +from packit_service.worker.checker.testing_farm import ( + IsJobConfigTriggerMatching as IsJobConfigTriggerMatchingTF, +) from packit_service.worker.checker.vm_image import ( - IsCoprBuildForChrootOk, HasAuthorWriteAccess, + IsCoprBuildForChrootOk, ) from packit_service.worker.events import ( - PullRequestGithubEvent, AbstractCoprBuildEvent, + PullRequestGithubEvent, ) from packit_service.worker.events.event import EventData from packit_service.worker.events.github import ( - PushGitHubEvent, PullRequestCommentGithubEvent, + PushGitHubEvent, ) from packit_service.worker.events.gitlab import MergeRequestGitlabEvent, PushGitlabEvent from packit_service.worker.events.pagure import PushPagureEvent diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py index 1b82f235d..c58f38092 100644 --- a/tests/unit/test_config.py +++ b/tests/unit/test_config.py @@ -4,15 +4,15 @@ import pytest from flexmock import flexmock from marshmallow import ValidationError - from packit.exceptions import PackitConfigException + +from packit_service import config from packit_service.config import ( - ServiceConfig, Deployment, - PackageConfigGetter, MRTarget, + PackageConfigGetter, + ServiceConfig, ) -from packit_service import config from packit_service.constants import TESTING_FARM_API_URL diff --git a/tests/unit/test_copr_build.py b/tests/unit/test_copr_build.py index 6f366967d..7a9a7d4eb 100644 --- a/tests/unit/test_copr_build.py +++ b/tests/unit/test_copr_build.py @@ -5,57 +5,56 @@ from datetime import datetime, timezone from typing import Optional +import packit import pytest from celery import Celery -from copr.v3 import Client -from copr.v3 import CoprAuthException +from copr.v3 import Client, CoprAuthException from copr.v3.proxies.build import BuildProxy from flexmock import flexmock from ogr.abstract import GitProject from ogr.exceptions import GitForgeInternalError, OgrNetworkError from ogr.services.github import GithubProject - -import packit -import packit_service from ogr.services.gitlab import GitlabProject from packit.api import PackitAPI from packit.config import ( CommonPackageConfig, JobConfig, JobConfigTriggerType, + JobConfigView, JobType, PackageConfig, - JobConfigView, ) from packit.copr_helper import CoprHelper from packit.exceptions import ( - PackitCoprSettingsException, PackitCoprProjectException, + PackitCoprSettingsException, ) + +import packit_service from packit_service.config import ServiceConfig from packit_service.constants import ( + DASHBOARD_JOBS_TESTING_FARM_PATH, DEFAULT_RETRY_LIMIT, DEFAULT_RETRY_LIMIT_OUTAGE, - DASHBOARD_JOBS_TESTING_FARM_PATH, ) from packit_service.models import ( - CoprBuildTargetModel, + BuildStatus, CoprBuildGroupModel, + CoprBuildTargetModel, GithubInstallationModel, GitProjectModel, ProjectEventModel, ProjectEventModelType, - SRPMBuildModel, PullRequestModel, - BuildStatus, + SRPMBuildModel, ) from packit_service.worker.celery_task import CeleryTask from packit_service.worker.checker.copr import IsGitForgeProjectAndEventOk from packit_service.worker.events import ( + EventData, PullRequestGithubEvent, PushGitHubEvent, PushGitlabEvent, - EventData, ) from packit_service.worker.handlers import CoprBuildHandler from packit_service.worker.helpers.build.copr_build import ( diff --git a/tests/unit/test_distgit.py b/tests/unit/test_distgit.py index 0e405fa83..d05bc03d0 100644 --- a/tests/unit/test_distgit.py +++ b/tests/unit/test_distgit.py @@ -5,16 +5,16 @@ import pytest from fasjson_client import Client from flexmock import flexmock - from ogr.services.github import GithubService from packit.api import PackitAPI from packit.config.notifications import NotificationsConfig + from packit_service.config import PackageConfigGetter from packit_service.worker.events.event import EventData from packit_service.worker.handlers.distgit import ( - ProposeDownstreamHandler, - DownstreamKojiBuildHandler, AbstractSyncReleaseHandler, + DownstreamKojiBuildHandler, + ProposeDownstreamHandler, PullFromUpstreamHandler, ) diff --git a/tests/unit/test_handler_mixin.py b/tests/unit/test_handler_mixin.py index 62b325088..8579a3b98 100644 --- a/tests/unit/test_handler_mixin.py +++ b/tests/unit/test_handler_mixin.py @@ -2,15 +2,16 @@ # SPDX-License-Identifier: MIT from typing import Optional -from flexmock import flexmock +from flexmock import flexmock from ogr.abstract import GitProject from packit.utils.koji_helper import KojiHelper + from packit_service.config import ServiceConfig from packit_service.constants import KojiBuildState from packit_service.worker.handlers.mixin import ( - GetKojiBuildDataFromKojiServiceMixin, GetKojiBuildDataFromKojiBuildEventMixin, + GetKojiBuildDataFromKojiServiceMixin, GetKojiBuildDataFromKojiServiceMultipleBranches, ) diff --git a/tests/unit/test_handler_vm_image.py b/tests/unit/test_handler_vm_image.py index a86b815a9..6a76a1528 100644 --- a/tests/unit/test_handler_vm_image.py +++ b/tests/unit/test_handler_vm_image.py @@ -2,28 +2,27 @@ # SPDX-License-Identifier: MIT from celery import Celery -from flexmock import flexmock -from flexmock import Mock +from flexmock import Mock, flexmock from packit_service.models import ( PipelineModel, ProjectEventModel, - VMImageBuildTargetModel, VMImageBuildStatus, + VMImageBuildTargetModel, ) -from packit_service.worker.result import TaskResults from packit_service.worker.events import VMImageBuildResultEvent from packit_service.worker.events.github import ( PullRequestCommentGithubEvent, ) -from packit_service.worker.handlers.vm_image import ( - GetVMImageBuildReporterFromJobHelperMixin, -) from packit_service.worker.handlers import ( VMImageBuildHandler, VMImageBuildResultHandler, ) -from packit_service.worker.reporting import StatusReporter, BaseCommitStatus +from packit_service.worker.handlers.vm_image import ( + GetVMImageBuildReporterFromJobHelperMixin, +) +from packit_service.worker.reporting import BaseCommitStatus, StatusReporter +from packit_service.worker.result import TaskResults def test_get_vm_image_build_reporter_from_job_helper_mixin( diff --git a/tests/unit/test_jobs.py b/tests/unit/test_jobs.py index 2463aba7c..8b4a195ac 100644 --- a/tests/unit/test_jobs.py +++ b/tests/unit/test_jobs.py @@ -2,12 +2,11 @@ # SPDX-License-Identifier: MIT import copy + import celery import pytest from flexmock import flexmock - from ogr.exceptions import GithubAppNotInstalledError - from packit.config import ( CommonPackageConfig, JobConfig, @@ -20,8 +19,13 @@ from packit_service.constants import COMMENT_REACTION from packit_service.worker.allowlist import Allowlist from packit_service.worker.events import ( + AbstractCoprBuildEvent, AbstractIssueCommentEvent, AbstractPRCommentEvent, + CheckRerunCommitEvent, + CheckRerunEvent, + CheckRerunPullRequestEvent, + CheckRerunReleaseEvent, CoprBuildEndEvent, CoprBuildStartEvent, IssueCommentEvent, @@ -35,30 +39,25 @@ PushGitlabEvent, PushPagureEvent, ReleaseEvent, - TestingFarmResultsEvent, - CheckRerunCommitEvent, - CheckRerunPullRequestEvent, - CheckRerunReleaseEvent, ReleaseGitlabEvent, - CheckRerunEvent, + TestingFarmResultsEvent, VMImageBuildResultEvent, - AbstractCoprBuildEvent, ) from packit_service.worker.events.koji import ( + AbstractKojiEvent, KojiBuildEvent, KojiBuildTagEvent, - AbstractKojiEvent, ) from packit_service.worker.handlers import ( CoprBuildEndHandler, + CoprBuildHandler, CoprBuildStartHandler, JobHandler, - TestingFarmHandler, - TestingFarmResultsHandler, - CoprBuildHandler, KojiBuildHandler, KojiTaskReportHandler, ProposeDownstreamHandler, + TestingFarmHandler, + TestingFarmResultsHandler, ) from packit_service.worker.handlers.bodhi import CreateBodhiUpdateHandler from packit_service.worker.handlers.distgit import DownstreamKojiBuildHandler diff --git a/tests/unit/test_koji_build.py b/tests/unit/test_koji_build.py index 6c402397d..0bd06422e 100644 --- a/tests/unit/test_koji_build.py +++ b/tests/unit/test_koji_build.py @@ -5,7 +5,6 @@ import pytest from flexmock import flexmock - from ogr.abstract import GitProject from packit.api import PackitAPI from packit.config import ( @@ -17,28 +16,29 @@ ) from packit.exceptions import PackitCommandFailedError from packit.upstream import GitUpstream + from packit_service import sentry_integration from packit_service.config import ServiceConfig from packit_service.models import ( - SRPMBuildModel, - KojiBuildTargetModel, - KojiBuildGroupModel, BuildStatus, + KojiBuildGroupModel, + KojiBuildTargetModel, + SRPMBuildModel, +) +from packit_service.service.urls import ( + get_koji_build_info_url, + get_srpm_build_info_url, ) from packit_service.worker.events import ( - PullRequestGithubEvent, + KojiTaskEvent, PullRequestCommentGithubEvent, + PullRequestGithubEvent, PushGitHubEvent, ReleaseEvent, - KojiTaskEvent, -) -from packit_service.service.urls import ( - get_koji_build_info_url, - get_srpm_build_info_url, ) from packit_service.worker.helpers.build import koji_build from packit_service.worker.helpers.build.koji_build import KojiBuildJobHelper -from packit_service.worker.reporting import StatusReporter, BaseCommitStatus +from packit_service.worker.reporting import BaseCommitStatus, StatusReporter def build_helper( diff --git a/tests/unit/test_mixin.py b/tests/unit/test_mixin.py index 8fce31024..4b7a93f0d 100644 --- a/tests/unit/test_mixin.py +++ b/tests/unit/test_mixin.py @@ -1,28 +1,27 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT -import pytest - -from flexmock import flexmock from typing import Optional -from packit.vm_image_build import ImageBuilder +import pytest +from flexmock import flexmock from ogr.abstract import GitProject +from packit.vm_image_build import ImageBuilder + from packit_service.config import ServiceConfig +from packit_service.worker.events import EventData +from packit_service.worker.events.comment import AbstractIssueCommentEvent from packit_service.worker.handlers.mixin import ( - GetVMImageBuilderMixin, GetCoprBuildJobHelperMixin, + GetVMImageBuilderMixin, GetVMImageDataMixin, ) from packit_service.worker.mixin import ( - GetBranchesFromIssueMixin, ConfigFromDistGitUrlMixin, ConfigFromEventMixin, + GetBranchesFromIssueMixin, ) -from packit_service.worker.events import EventData -from packit_service.worker.events.comment import AbstractIssueCommentEvent - def test_GetVMImageBuilderMixin(): class Test(ConfigFromEventMixin, GetVMImageBuilderMixin): ... diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py index fc216d860..973440873 100644 --- a/tests/unit/test_models.py +++ b/tests/unit/test_models.py @@ -7,8 +7,8 @@ from flexmock import flexmock from packit_service.models import ( - filter_most_recent_target_models_by_status, TestingFarmResult, + filter_most_recent_target_models_by_status, filter_most_recent_target_names_by_status, ) diff --git a/tests/unit/test_monitoring.py b/tests/unit/test_monitoring.py index a1d992b63..8d0a8ff08 100644 --- a/tests/unit/test_monitoring.py +++ b/tests/unit/test_monitoring.py @@ -3,8 +3,8 @@ import datetime -from flexmock import flexmock import pytest +from flexmock import flexmock from packit_service.worker.handlers import ( CoprBuildHandler, diff --git a/tests/unit/test_open_scan_hub.py b/tests/unit/test_open_scan_hub.py index ea597a483..c52887eae 100644 --- a/tests/unit/test_open_scan_hub.py +++ b/tests/unit/test_open_scan_hub.py @@ -2,42 +2,41 @@ # SPDX-License-Identifier: MIT import datetime -import pytest import json -from flexmock import flexmock -from celery.canvas import group as celery_group +import pytest +from celery.canvas import group as celery_group +from flexmock import flexmock from packit.api import PackitAPI from packit.config import ( - JobType, + CommonPackageConfig, + JobConfig, JobConfigTriggerType, + JobType, PackageConfig, - JobConfig, - CommonPackageConfig, ) + from packit_service.models import ( - CoprBuildTargetModel, - ProjectEventModelType, BuildStatus, + CoprBuildTargetModel, OSHScanModel, + ProjectEventModelType, ) -from packit_service.worker.tasks import ( - run_openscanhub_task_finished_handler, - run_openscanhub_task_started_handler, -) -from packit_service.worker.jobs import SteveJobs -from packit_service.worker.monitoring import Pushgateway -from packit_service.worker.reporting import BaseCommitStatus - from packit_service.worker.events import ( AbstractCoprBuildEvent, OpenScanHubTaskFinishedEvent, OpenScanHubTaskStartedEvent, ) -from packit_service.worker.helpers import open_scan_hub from packit_service.worker.handlers.copr import OpenScanHubHelper +from packit_service.worker.helpers import open_scan_hub from packit_service.worker.helpers.build import CoprBuildJobHelper - +from packit_service.worker.jobs import SteveJobs +from packit_service.worker.monitoring import Pushgateway +from packit_service.worker.reporting import BaseCommitStatus +from packit_service.worker.tasks import ( + run_openscanhub_task_finished_handler, + run_openscanhub_task_started_handler, +) from tests.spellbook import DATA_DIR, get_parameters_from_results @@ -110,7 +109,7 @@ def prepare_openscanhub_db_and_handler( def test_handle_scan(build_models): srpm_mock = flexmock(url="https://some-url/my-srpm.src.rpm") flexmock(AbstractCoprBuildEvent).should_receive("from_event_dict").and_return( - flexmock(chroot="fedora-rawhide-x86_64", build_id="123", pr_id=12) + flexmock(chroot="fedora-rawhide-x86_64", build_id="123", pr_id=12), ) flexmock(open_scan_hub).should_receive("download_file").twice().and_return(True) @@ -124,7 +123,7 @@ def test_handle_scan(build_models): ).and_return(models).once() flexmock(PackitAPI).should_receive("run_osh_build").once().and_return( - 'some\nmultiline\noutput\n{"id": 123}\nand\nmore\n{"url": "scan-url"}\n' + 'some\nmultiline\noutput\n{"id": 123}\nand\nmore\n{"url": "scan-url"}\n', ) flexmock(CoprBuildJobHelper).should_receive("_report") @@ -136,13 +135,14 @@ def test_handle_scan(build_models): branch="main", project="commit-project", owner="user-123", - ) - ] + ), + ], ) project = flexmock( get_pr=lambda pr_id: flexmock( - target_branch="main", target_branch_head_commit="abcdef" + target_branch="main", + target_branch_head_commit="abcdef", ), get_commits=lambda ref: ["abcdef", "fedcba"], ) @@ -226,7 +226,7 @@ def test_handle_scan_task_finished( ): flexmock(OpenScanHubTaskFinishedEvent).should_receive( - "get_packages_config" + "get_packages_config", ).and_return( PackageConfig( jobs=[ @@ -237,12 +237,12 @@ def test_handle_scan_task_finished( "package": CommonPackageConfig( _targets=job_config_targets, specfile_path="test.spec", - ) + ), }, ), ], packages={"package": CommonPackageConfig()}, - ) + ), ) scan_mock = prepare_openscanhub_db_and_handler @@ -258,7 +258,7 @@ def test_handle_scan_task_finished( "Scan in OpenScanHub is finished. Check the URL for more details." ) flexmock(scan_mock).should_receive("set_status").with_args( - "succeeded" + "succeeded", ).once() links_to_external_services = { "Added issues": ( @@ -279,7 +279,7 @@ def test_handle_scan_task_finished( description = f"Scan in OpenScanHub is finished in a {scan_status} state." links_to_external_services = {} flexmock(scan_mock).should_receive("set_status").with_args( - "canceled" + "canceled", ).once() else: state = BaseCommitStatus.neutral @@ -298,7 +298,7 @@ def test_handle_scan_task_finished( for sub_results in processing_results: event_dict, job, job_config, package_config = get_parameters_from_results( - [sub_results] + [sub_results], ) assert json.dumps(event_dict) @@ -341,7 +341,7 @@ def test_handle_scan_task_started( num_of_handlers, ): flexmock(OpenScanHubTaskStartedEvent).should_receive( - "get_packages_config" + "get_packages_config", ).and_return( PackageConfig( jobs=[ @@ -352,12 +352,12 @@ def test_handle_scan_task_started( "package": CommonPackageConfig( _targets=job_config_targets, specfile_path="test.spec", - ) + ), }, ), ], packages={"package": CommonPackageConfig()}, - ) + ), ) scan_mock = prepare_openscanhub_db_and_handler @@ -375,7 +375,7 @@ def test_handle_scan_task_started( for sub_results in processing_results: event_dict, job, job_config, package_config = get_parameters_from_results( - [sub_results] + [sub_results], ) assert json.dumps(event_dict) diff --git a/tests/unit/test_propose_downstream.py b/tests/unit/test_propose_downstream.py index 312e999ab..61b75625a 100644 --- a/tests/unit/test_propose_downstream.py +++ b/tests/unit/test_propose_downstream.py @@ -3,9 +3,9 @@ import pytest from flexmock import flexmock - -from packit.config import CommonPackageConfig, PackageConfig, JobConfig, JobType +from packit.config import CommonPackageConfig, JobConfig, JobType, PackageConfig from packit.config.job_config import JobConfigTriggerType + from packit_service.config import ServiceConfig from packit_service.worker.helpers.sync_release.propose_downstream import ( ProposeDownstreamJobHelper, diff --git a/tests/unit/test_reporting.py b/tests/unit/test_reporting.py index 04dc65590..6823c0a18 100644 --- a/tests/unit/test_reporting.py +++ b/tests/unit/test_reporting.py @@ -9,24 +9,24 @@ from ogr.exceptions import GithubAPIException, GitlabAPIException from ogr.services.github import GithubProject from ogr.services.github.check_run import ( - create_github_check_run_output, - GithubCheckRunStatus, GithubCheckRunResult, + GithubCheckRunStatus, + create_github_check_run_output, ) from ogr.services.gitlab import GitlabProject from ogr.services.pagure import PagureProject from packit.config.notifications import ( - NotificationsConfig, FailureCommentNotificationsConfig, + NotificationsConfig, ) from packit_service.worker.reporting import ( - StatusReporter, BaseCommitStatus, + DuplicateCheckMode, + StatusReporter, + StatusReporterGithubChecks, StatusReporterGithubStatuses, StatusReporterGitlab, - StatusReporterGithubChecks, - DuplicateCheckMode, update_message_with_configured_failure_comment_message, ) from packit_service.worker.reporting.news import News diff --git a/tests/unit/test_scan.py b/tests/unit/test_scan.py deleted file mode 100644 index ad42e4c9e..000000000 --- a/tests/unit/test_scan.py +++ /dev/null @@ -1,92 +0,0 @@ -# Copyright Contributors to the Packit project. -# SPDX-License-Identifier: MIT - -import pytest -from flexmock import flexmock - -from packit.api import PackitAPI -from packit.config import JobType, JobConfigTriggerType -from packit_service.models import ( - CoprBuildTargetModel, - ProjectEventModelType, - BuildStatus, -) -from packit_service.worker.events import AbstractCoprBuildEvent -from packit_service.worker.handlers import copr -from packit_service.worker.handlers.copr import ScanHelper -from packit_service.worker.helpers.build import CoprBuildJobHelper - - -@pytest.mark.parametrize( - "build_models", - [ - [("abcdef", [flexmock(get_srpm_build=lambda: flexmock(url="base-srpm-url"))])], - [ - ("abcdef", []), - ( - "fedcba", - [flexmock(get_srpm_build=lambda: flexmock(url="base-srpm-url"))], - ), - ], - ], -) -def test_handle_scan(build_models): - srpm_mock = flexmock(url="https://some-url/my-srpm.src.rpm") - flexmock(AbstractCoprBuildEvent).should_receive("from_event_dict").and_return( - flexmock(chroot="fedora-rawhide-x86_64", build_id="123", pr_id=12), - ) - flexmock(copr).should_receive("download_file").twice().and_return(True) - - for commit_sha, models in build_models: - flexmock(CoprBuildTargetModel).should_receive("get_all_by").with_args( - commit_sha=commit_sha, - project_name="commit-project", - owner="user-123", - target="fedora-rawhide-x86_64", - status=BuildStatus.success, - ).and_return(models).once() - - flexmock(PackitAPI).should_receive("run_osh_build").once().and_return( - 'some\nmultiline\noutput\n{"id": 123}\nand\nmore\n{"url": "scan-url"}\n', - ) - - flexmock(CoprBuildJobHelper).should_receive("_report") - package_config = flexmock( - get_job_views=lambda: [ - flexmock( - type=JobType.copr_build, - trigger=JobConfigTriggerType.commit, - branch="main", - project="commit-project", - owner="user-123", - ), - ], - ) - - project = flexmock( - get_pr=lambda pr_id: flexmock( - target_branch="main", - target_branch_head_commit="abcdef", - ), - get_commits=lambda ref: ["abcdef", "fedcba"], - ) - - ScanHelper( - build=flexmock( - id=1, - get_srpm_build=lambda: srpm_mock, - target="fedora-rawhide-x86_64", - get_project_event_model=lambda: flexmock( - type=ProjectEventModelType.pull_request, - get_project_event_object=lambda: flexmock(), - ), - ), - copr_build_helper=CoprBuildJobHelper( - service_config=flexmock(), - package_config=package_config, - project=project, - metadata=flexmock(pr_id=12), - db_project_event=flexmock(get_project_event_object=lambda: None), - job_config=flexmock(), - ), - ).handle_scan() diff --git a/tests/unit/test_srpm_logs.py b/tests/unit/test_srpm_logs.py index c9e98222b..866770b43 100644 --- a/tests/unit/test_srpm_logs.py +++ b/tests/unit/test_srpm_logs.py @@ -2,12 +2,11 @@ # SPDX-License-Identifier: MIT -from typing import Union import logging import re +from typing import Union from flexmock import flexmock - from ogr.abstract import GitProject from packit.api import PackitAPI from packit.config import ( @@ -17,11 +16,12 @@ JobType, PackageConfig, ) + from packit_service.config import ServiceConfig from packit_service.models import SRPMBuildModel from packit_service.worker.events.github import ( - PullRequestGithubEvent, PullRequestCommentGithubEvent, + PullRequestGithubEvent, PushGitHubEvent, ReleaseEvent, ) diff --git a/tests/unit/test_status_names.py b/tests/unit/test_status_names.py index 22ca647b1..2ed42b7a1 100644 --- a/tests/unit/test_status_names.py +++ b/tests/unit/test_status_names.py @@ -2,9 +2,9 @@ # SPDX-License-Identifier: MIT # import re +import logging from dataclasses import dataclass from typing import Optional -import logging # from flexmock import flexmock import pytest diff --git a/tests/unit/test_steve.py b/tests/unit/test_steve.py index 2743be7bd..bf5a12790 100644 --- a/tests/unit/test_steve.py +++ b/tests/unit/test_steve.py @@ -14,26 +14,26 @@ from github.MainClass import Github from ogr.services.github import GithubProject from ogr.services.pagure import PagureProject - from packit.api import PackitAPI from packit.config import JobConfigTriggerType from packit.distgit import DistGit from packit.local_project import LocalProject, LocalProjectBuilder + from packit_service.config import ServiceConfig from packit_service.constants import ( TASK_ACCEPTED, ) from packit_service.models import ( - ProjectEventModelType, - ProjectEventModel, PipelineModel, + ProjectEventModel, + ProjectEventModelType, ProjectReleaseModel, + SyncReleaseJobType, SyncReleaseModel, + SyncReleasePullRequestModel, SyncReleaseStatus, SyncReleaseTargetModel, SyncReleaseTargetStatus, - SyncReleaseJobType, - SyncReleasePullRequestModel, ) from packit_service.service.urls import get_propose_downstream_info_url from packit_service.worker.allowlist import Allowlist diff --git a/tests/unit/test_tasks.py b/tests/unit/test_tasks.py index 43c85aa8f..757c4b1f2 100644 --- a/tests/unit/test_tasks.py +++ b/tests/unit/test_tasks.py @@ -7,8 +7,8 @@ from copr.v3 import CoprRequestException from flexmock import flexmock -from packit_service.worker.tasks import run_copr_build_handler from packit_service.worker.handlers import CoprBuildHandler +from packit_service.worker.tasks import run_copr_build_handler def test_autoretry(): diff --git a/tests/unit/test_testing_farm.py b/tests/unit/test_testing_farm.py index 9c3ddd927..27b8fd3db 100644 --- a/tests/unit/test_testing_farm.py +++ b/tests/unit/test_testing_farm.py @@ -5,9 +5,6 @@ import pytest from flexmock import flexmock - -import packit_service.models -import packit_service.service.urls as urls from packit.config import ( CommonPackageConfig, JobConfig, @@ -17,30 +14,37 @@ ) from packit.copr_helper import CoprHelper from packit.local_project import LocalProject + +import packit_service.models +import packit_service.service.urls as urls from packit_service.config import PackageConfigGetter, ServiceConfig -from packit_service.models import ProjectEventModel, ProjectEventModelType, BuildStatus from packit_service.models import ( - TFTTestRunTargetModel, - PullRequestModel, + BuildStatus, PipelineModel, - TFTTestRunGroupModel, + ProjectEventModel, + ProjectEventModelType, + PullRequestModel, TestingFarmResult, + TFTTestRunGroupModel, + TFTTestRunTargetModel, ) from packit_service.models import TestingFarmResult as TFResult +from packit_service.worker.events import ( + EventData, +) # These names are definitely not nice, still they help with making classes # whose names start with Testing* or Test* to become invisible for pytest, # and so stop the test discovery warnings. from packit_service.worker.events import ( TestingFarmResultsEvent as TFResultsEvent, - EventData, ) from packit_service.worker.handlers import TestingFarmHandler from packit_service.worker.handlers import TestingFarmResultsHandler as TFResultsHandler from packit_service.worker.helpers.testing_farm import ( TestingFarmJobHelper as TFJobHelper, ) -from packit_service.worker.reporting import StatusReporter, BaseCommitStatus +from packit_service.worker.reporting import BaseCommitStatus, StatusReporter from packit_service.worker.result import TaskResults diff --git a/tests/unit/test_views.py b/tests/unit/test_views.py index 3052a9298..ff2d682d8 100644 --- a/tests/unit/test_views.py +++ b/tests/unit/test_views.py @@ -14,8 +14,8 @@ ProjectEventModelType, SRPMBuildModel, ) -from packit_service.service.app import packit_as_a_service as application from packit_service.service import urls +from packit_service.service.app import packit_as_a_service as application from packit_service.service.urls import ( get_copr_build_info_url, get_srpm_build_info_url, diff --git a/tests_openshift/conftest.py b/tests_openshift/conftest.py index 6e2ea343d..fb3c8617b 100644 --- a/tests_openshift/conftest.py +++ b/tests_openshift/conftest.py @@ -15,41 +15,41 @@ import datetime import pytest - from ogr import GithubService, GitlabService, PagureService + from packit_service.config import ServiceConfig from packit_service.models import ( - CoprBuildTargetModel, - CoprBuildGroupModel, - ProjectEventModel, - sa_session_transaction, - SRPMBuildModel, - PullRequestModel, - GitProjectModel, AllowlistModel, + BodhiUpdateGroupModel, + BodhiUpdateTargetModel, + BuildStatus, + CoprBuildGroupModel, + CoprBuildTargetModel, GitBranchModel, - ProjectReleaseModel, + GithubInstallationModel, + GitProjectModel, IssueModel, - PipelineModel, - ProjectEventModelType, - KojiBuildTargetModel, KojiBuildGroupModel, - TFTTestRunTargetModel, - TFTTestRunGroupModel, - TestingFarmResult, - GithubInstallationModel, + KojiBuildTargetModel, + OSHScanModel, + PipelineModel, ProjectAuthenticationIssueModel, - SyncReleaseTargetModel, - SyncReleaseTargetStatus, - SyncReleaseModel, - SyncReleaseStatus, + ProjectEventModel, + ProjectEventModelType, + ProjectReleaseModel, + PullRequestModel, SourceGitPRDistGitPRModel, - BuildStatus, + SRPMBuildModel, SyncReleaseJobType, - BodhiUpdateTargetModel, - BodhiUpdateGroupModel, + SyncReleaseModel, SyncReleasePullRequestModel, - OSHScanModel, + SyncReleaseStatus, + SyncReleaseTargetModel, + SyncReleaseTargetStatus, + TestingFarmResult, + TFTTestRunGroupModel, + TFTTestRunTargetModel, + sa_session_transaction, ) from packit_service.worker.events import InstallationEvent diff --git a/tests_openshift/database/test_allowlist.py b/tests_openshift/database/test_allowlist.py index 4e95c7797..5322293e2 100644 --- a/tests_openshift/database/test_allowlist.py +++ b/tests_openshift/database/test_allowlist.py @@ -4,7 +4,7 @@ # Create multiple allowlist entries import pytest -from packit_service.models import sa_session_transaction, AllowlistModel +from packit_service.models import AllowlistModel, sa_session_transaction @pytest.fixture() diff --git a/tests_openshift/database/test_events.py b/tests_openshift/database/test_events.py index 9e01cafe8..40bb88cde 100644 --- a/tests_openshift/database/test_events.py +++ b/tests_openshift/database/test_events.py @@ -7,29 +7,29 @@ from packit_service.constants import KojiTaskState from packit_service.models import ( - ProjectReleaseModel, - GitProjectModel, + BuildStatus, + CoprBuildTargetModel, GitBranchModel, + GitProjectModel, + ProjectReleaseModel, PullRequestModel, - CoprBuildTargetModel, - TFTTestRunTargetModel, TestingFarmResult, - BuildStatus, + TFTTestRunTargetModel, filter_most_recent_target_names_by_status, ) from packit_service.worker.events import ( - ReleaseEvent, - PushGitHubEvent, - PullRequestGithubEvent, - PullRequestCommentGithubEvent, - TestingFarmResultsEvent, - MergeRequestGitlabEvent, - KojiTaskEvent, - MergeRequestCommentGitlabEvent, - PushGitlabEvent, CheckRerunCommitEvent, CheckRerunPullRequestEvent, CheckRerunReleaseEvent, + KojiTaskEvent, + MergeRequestCommentGitlabEvent, + MergeRequestGitlabEvent, + PullRequestCommentGithubEvent, + PullRequestGithubEvent, + PushGitHubEvent, + PushGitlabEvent, + ReleaseEvent, + TestingFarmResultsEvent, ) from packit_service.worker.helpers.testing_farm import TestingFarmJobHelper from packit_service.worker.parser import Parser diff --git a/tests_openshift/database/test_models.py b/tests_openshift/database/test_models.py index a3dde9f41..2f5a13470 100644 --- a/tests_openshift/database/test_models.py +++ b/tests_openshift/database/test_models.py @@ -1,39 +1,38 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT -import pytest - from datetime import datetime, timedelta -from sqlalchemy.exc import ProgrammingError, IntegrityError +import pytest +from sqlalchemy.exc import IntegrityError, ProgrammingError from packit_service.models import ( - CoprBuildTargetModel, + BuildStatus, CoprBuildGroupModel, + CoprBuildTargetModel, GitBranchModel, - GitProjectModel, GithubInstallationModel, - ProjectEventModelType, - KojiBuildTargetModel, + GitProjectModel, KojiBuildGroupModel, + KojiBuildTargetModel, + OSHScanModel, + PipelineModel, ProjectAuthenticationIssueModel, + ProjectEventModel, + ProjectEventModelType, ProjectReleaseModel, PullRequestModel, - ProjectEventModel, - SRPMBuildModel, + Session, SourceGitPRDistGitPRModel, - TFTTestRunTargetModel, - TFTTestRunGroupModel, - TestingFarmResult, - sa_session_transaction, - PipelineModel, - SyncReleaseTargetStatus, + SRPMBuildModel, + SyncReleaseJobType, + SyncReleaseModel, SyncReleaseStatus, SyncReleaseTargetModel, - SyncReleaseModel, - Session, - BuildStatus, - SyncReleaseJobType, - OSHScanModel, + SyncReleaseTargetStatus, + TestingFarmResult, + TFTTestRunGroupModel, + TFTTestRunTargetModel, + sa_session_transaction, ) from tests_openshift.conftest import SampleValues diff --git a/tests_openshift/database/test_tasks.py b/tests_openshift/database/test_tasks.py index 29fe24529..3a3709a83 100644 --- a/tests_openshift/database/test_tasks.py +++ b/tests_openshift/database/test_tasks.py @@ -2,25 +2,25 @@ # SPDX-License-Identifier: MIT import pytest -from copr.v3 import Client, BuildProxy, BuildChrootProxy +from copr.v3 import BuildChrootProxy, BuildProxy, Client from flexmock import flexmock from munch import Munch -from packit.copr_helper import CoprHelper - from ogr.services.github import GithubProject from packit.config import ( CommonPackageConfig, - PackageConfig, JobConfig, - JobType, JobConfigTriggerType, + JobType, + PackageConfig, ) +from packit.copr_helper import CoprHelper + from packit_service.models import ( - CoprBuildTargetModel, - CoprBuildGroupModel, - SRPMBuildModel, BuildStatus, + CoprBuildGroupModel, + CoprBuildTargetModel, ProjectEventModel, + SRPMBuildModel, ) from packit_service.worker.events import AbstractCoprBuildEvent from packit_service.worker.helpers.build.babysit import check_copr_build diff --git a/tests_openshift/openshift_integration/base.py b/tests_openshift/openshift_integration/base.py index fb5eb882d..9e44c72ca 100644 --- a/tests_openshift/openshift_integration/base.py +++ b/tests_openshift/openshift_integration/base.py @@ -2,14 +2,16 @@ # SPDX-License-Identifier: MIT import os -from shutil import copy -from pathlib import Path import unittest -from requre.constants import RELATIVE_TEST_DATA_DIRECTORY -from requre.cassette import StorageMode +from glob import glob +from pathlib import Path +from shutil import copy + from packit.config import RunCommandType +from requre.cassette import StorageMode +from requre.constants import RELATIVE_TEST_DATA_DIRECTORY + from packit_service.worker.jobs import SteveJobs -from glob import glob PROJECT_DIR = Path(__file__).parent.parent.parent DATA_DIR = PROJECT_DIR / "tests" / "data" diff --git a/tests_openshift/openshift_integration/test_copr.py b/tests_openshift/openshift_integration/test_copr.py index 479a565db..cbc0aad96 100644 --- a/tests_openshift/openshift_integration/test_copr.py +++ b/tests_openshift/openshift_integration/test_copr.py @@ -4,7 +4,7 @@ import json import unittest -from tests_openshift.openshift_integration.base import PackitServiceTestCase, DATA_DIR +from tests_openshift.openshift_integration.base import DATA_DIR, PackitServiceTestCase def pr_event(): diff --git a/tests_openshift/openshift_integration/test_pkgtool.py b/tests_openshift/openshift_integration/test_pkgtool.py index fd722f9d3..1aa6ecade 100644 --- a/tests_openshift/openshift_integration/test_pkgtool.py +++ b/tests_openshift/openshift_integration/test_pkgtool.py @@ -1,23 +1,24 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT -from pathlib import Path -import tempfile import shutil +import tempfile +from pathlib import Path + +from packit.pkgtool import PkgTool +from requre.helpers.files import StoreFiles +from requre.helpers.git.fetchinfo import FetchInfoStorageList +from requre.helpers.git.pushinfo import PushInfoStorageList +from requre.helpers.git.repo import Repo +from requre.helpers.simple_object import Simple +from requre.helpers.tempfile import MkDTemp, MkTemp from requre.online_replacing import ( - record_requests_for_all_methods, apply_decorator_to_all_methods, + record_requests_for_all_methods, replace_module_match, ) -from requre.helpers.files import StoreFiles -from requre.helpers.simple_object import Simple -from requre.helpers.git.pushinfo import PushInfoStorageList -from requre.helpers.tempfile import MkTemp, MkDTemp -from requre.helpers.git.fetchinfo import FetchInfoStorageList -from requre.helpers.git.repo import Repo from tests_openshift.openshift_integration.base import PackitServiceTestCase -from packit.pkgtool import PkgTool # where="download_helper", # what="DownloadHelper.request", diff --git a/tests_openshift/service/test_api.py b/tests_openshift/service/test_api.py index fe8890bfa..ea480e5cf 100644 --- a/tests_openshift/service/test_api.py +++ b/tests_openshift/service/test_api.py @@ -5,10 +5,10 @@ from packit.utils import nested_get from packit_service.models import ( - TestingFarmResult, PipelineModel, SyncReleaseStatus, SyncReleaseTargetStatus, + TestingFarmResult, ) from packit_service.service.api.runs import process_runs from tests_openshift.conftest import SampleValues From 87fd1cbc2974ef0f9fd255bef75c2f2e2014305c Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Tue, 22 Oct 2024 14:04:52 +0200 Subject: [PATCH 07/13] ci(ruff): enable flake8-pie Signed-off-by: Matej Focko --- packit_service/service/api/healthz.py | 1 - packit_service/worker/mixin.py | 1 - ruff.toml | 2 +- tests/integration/test_issue_comment.py | 2 +- 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packit_service/service/api/healthz.py b/packit_service/service/api/healthz.py index 9f8abb82f..10e892b8a 100644 --- a/packit_service/service/api/healthz.py +++ b/packit_service/service/api/healthz.py @@ -26,4 +26,3 @@ def get(self): def head(self): """Health check (no body)""" # HEAD is identical to GET except that it MUST NOT return a message-body in the response - pass diff --git a/packit_service/worker/mixin.py b/packit_service/worker/mixin.py index 395452690..4d1901f11 100644 --- a/packit_service/worker/mixin.py +++ b/packit_service/worker/mixin.py @@ -169,7 +169,6 @@ def clean_api(self) -> None: """TODO: probably we should clean something even here but for now let it do the same as before the refactoring """ - pass class PackitAPIWithUpstreamMixin(PackitAPIProtocol): diff --git a/ruff.toml b/ruff.toml index 0174961dd..f0daee951 100644 --- a/ruff.toml +++ b/ruff.toml @@ -6,7 +6,7 @@ select = [ # "F", # Pyflakes "I", # isort # "PERF",# Perflint - # "PIE", # flake8-pie + "PIE", # flake8-pie # "PT", # flake8-pytest-style, would be nice to enable # "RET", # flake8-return # "RUF", # Ruff-specific rules diff --git a/tests/integration/test_issue_comment.py b/tests/integration/test_issue_comment.py index dbb6ad0d1..22ce5152b 100644 --- a/tests/integration/test_issue_comment.py +++ b/tests/integration/test_issue_comment.py @@ -325,7 +325,7 @@ def mock_repository_issue_retriggering(): | `f38` | `` | You can retrigger the update by adding a comment (`/packit propose-downstream`) into this issue. """, - get_comments=lambda: [], + get_comments=list, comment=lambda message: None, ) project = ( From 9873559b4906d51c234ce847290e1c9da139d00c Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Tue, 22 Oct 2024 14:14:08 +0200 Subject: [PATCH 08/13] ci(ruff): enable flake8-return Signed-off-by: Matej Focko --- ..._link_srpmbuildmodel_to_jobtriggermodel.py | 5 +--- files/scripts/webhook.py | 2 ++ packit_service/models.py | 3 +- packit_service/service/api/webhooks.py | 16 +++++------ packit_service/utils.py | 2 +- packit_service/worker/checker/vm_image.py | 4 +-- packit_service/worker/events/copr.py | 4 +-- packit_service/worker/events/event.py | 4 +-- packit_service/worker/events/koji.py | 7 ++--- packit_service/worker/events/new_hotness.py | 6 ++-- packit_service/worker/events/pagure.py | 4 +-- packit_service/worker/events/testing_farm.py | 19 +++++++------ packit_service/worker/handlers/abstract.py | 4 +-- packit_service/worker/handlers/bodhi.py | 10 +++---- .../worker/handlers/open_scan_hub.py | 8 ++++-- packit_service/worker/helpers/job_helper.py | 6 ++-- packit_service/worker/helpers/testing_farm.py | 12 +++----- packit_service/worker/parser.py | 12 ++++---- .../worker/reporting/reporters/base.py | 5 ++-- ruff.toml | 2 +- tests/conftest.py | 4 ++- tests/integration/test_listen_to_fedmsg.py | 28 +++++++++---------- 22 files changed, 80 insertions(+), 87 deletions(-) diff --git a/alembic/versions/726cb0f70c6d_link_srpmbuildmodel_to_jobtriggermodel.py b/alembic/versions/726cb0f70c6d_link_srpmbuildmodel_to_jobtriggermodel.py index c661cdeb2..c6edef5a8 100644 --- a/alembic/versions/726cb0f70c6d_link_srpmbuildmodel_to_jobtriggermodel.py +++ b/alembic/versions/726cb0f70c6d_link_srpmbuildmodel_to_jobtriggermodel.py @@ -173,10 +173,7 @@ def set_trigger(self, session: Session, trigger_id: int): @classmethod def get_all(cls, session: Session): - srpm_builds = ( - session.query(SRPMBuildModel).order_by(desc(SRPMBuildModel.id)).all() - ) - return srpm_builds + return session.query(SRPMBuildModel).order_by(desc(SRPMBuildModel.id)).all() def __repr__(self): return f"SRPMBuildModel(id={self.id} trigger={self.job_trigger_id})" diff --git a/files/scripts/webhook.py b/files/scripts/webhook.py index b92fd73b6..06d14036d 100644 --- a/files/scripts/webhook.py +++ b/files/scripts/webhook.py @@ -111,6 +111,8 @@ def run(hostname, pr, project, github_token): verify=False, ) print(response.text) + return None + return None if __name__ == "__main__": diff --git a/packit_service/models.py b/packit_service/models.py index 482a951da..7b894a403 100644 --- a/packit_service/models.py +++ b/packit_service/models.py @@ -3859,7 +3859,7 @@ def get_all_by( def get_all_by_commit(cls, commit_sha: str) -> Iterable["VMImageBuildTargetModel"]: """Returns all builds that match a given commit sha""" with sa_session_transaction() as session: - query = ( + return ( session.query(VMImageBuildTargetModel) .join( PipelineModel, @@ -3872,7 +3872,6 @@ def get_all_by_commit(cls, commit_sha: str) -> Iterable["VMImageBuildTargetModel .filter(ProjectEventModel.commit_sha == commit_sha) .order_by(VMImageBuildTargetModel.build_id.desc()) ) - return query @classmethod def create( diff --git a/packit_service/service/api/webhooks.py b/packit_service/service/api/webhooks.py index 27de5ba9e..ccdd8a1ad 100644 --- a/packit_service/service/api/webhooks.py +++ b/packit_service/service/api/webhooks.py @@ -146,10 +146,10 @@ def validate_signature(): msg = "X-Hub-Signature-256 not in request.headers" logger.warning(msg) raise ValidationFailed(msg) - else: - # don't validate signatures when testing locally - logger.debug("Ain't validating signatures.") - return + + # don't validate signatures when testing locally + logger.debug("Ain't validating signatures.") + return if not (webhook_secret := config.webhook_secret.encode()): msg = "'webhook_secret' not specified in the config." @@ -275,10 +275,10 @@ def validate_token(self): logger.info(msg) self.create_confidential_issue_with_token() raise ValidationFailed(msg) - else: - # don't validate signatures when testing locally - logger.debug("Ain't validating token.") - return + + # don't validate signatures when testing locally + logger.debug("Ain't validating token.") + return token = request.headers["X-Gitlab-Token"] diff --git a/packit_service/utils.py b/packit_service/utils.py index a625427b1..de6bfa690 100644 --- a/packit_service/utils.py +++ b/packit_service/utils.py @@ -35,7 +35,7 @@ def __init__(self, func): def __call__(self, *args, **kwargs): if self.configured: logger.debug(f"Function {self.func.__name__} already called. Skipping.") - return + return None self.configured = True logger.debug( diff --git a/packit_service/worker/checker/vm_image.py b/packit_service/worker/checker/vm_image.py index ba920d92a..0bdd69e6b 100644 --- a/packit_service/worker/checker/vm_image.py +++ b/packit_service/worker/checker/vm_image.py @@ -32,8 +32,8 @@ class GetVMImageBuildReporterFromJobHelperMixin( def get_build_check_name(self) -> str: if self.identifier: return f"{self.status_name}-{self.chroot}-{self.identifier}" - else: - return f"{self.status_name}-{self.chroot}" + + return f"{self.status_name}-{self.chroot}" def report_pre_check_failure(self, markdown_content): self.report( diff --git a/packit_service/worker/events/copr.py b/packit_service/worker/events/copr.py index 2a35b31aa..3dfa4e458 100644 --- a/packit_service/worker/events/copr.py +++ b/packit_service/worker/events/copr.py @@ -82,8 +82,8 @@ def get_base_project(self) -> Optional[GitProject]: repo=self.project.repo, is_fork=True, ) - else: - return None # With Github app, we cannot work with fork repo + + return None # With Github app, we cannot work with fork repo return self.project @classmethod diff --git a/packit_service/worker/events/event.py b/packit_service/worker/events/event.py index 85dff774e..a8f4cff43 100644 --- a/packit_service/worker/events/event.py +++ b/packit_service/worker/events/event.py @@ -602,7 +602,7 @@ def get_packages_config(self) -> Optional[PackageConfig]: f"\tpr_id: {self.pr_id}", ) - packages_config = PackageConfigGetter.get_package_config_from_repo( + return PackageConfigGetter.get_package_config_from_repo( base_project=self.base_project, project=self.project, reference=self.commit_sha, @@ -610,8 +610,6 @@ def get_packages_config(self) -> Optional[PackageConfig]: fail_when_missing=self.fail_when_config_file_missing, ) - return packages_config - def get_all_tf_targets_by_status( self, statuses_to_filter_with: list[str], diff --git a/packit_service/worker/events/koji.py b/packit_service/worker/events/koji.py index 8eefcb93e..da6e51aa8 100644 --- a/packit_service/worker/events/koji.py +++ b/packit_service/worker/events/koji.py @@ -166,7 +166,7 @@ def get_packages_config(self) -> Optional[PackageConfig]: f"\tdefault_branch: {self.project.default_branch}\n", ) - packages_config = PackageConfigGetter.get_package_config_from_repo( + return PackageConfigGetter.get_package_config_from_repo( base_project=None, project=self.project, pr_id=None, @@ -174,8 +174,6 @@ def get_packages_config(self) -> Optional[PackageConfig]: fail_when_missing=self.fail_when_config_file_missing, ) - return packages_config - @property def commit_sha(self) -> Optional[str]: # type:ignore # mypy does not like properties @@ -321,8 +319,7 @@ def get_base_project(self) -> Optional[GitProject]: repo=self.project.repo, is_fork=True, ) - else: - return None # With Github app, we cannot work with fork repo + return None # With Github app, we cannot work with fork repo return self.project def get_dict(self, default_dict: Optional[dict] = None) -> dict: diff --git a/packit_service/worker/events/new_hotness.py b/packit_service/worker/events/new_hotness.py index 83b1abfee..1df7eb5cf 100644 --- a/packit_service/worker/events/new_hotness.py +++ b/packit_service/worker/events/new_hotness.py @@ -83,7 +83,7 @@ def _add_release_and_event(self): logger.info( "Not going to create the DB project event, not valid arguments.", ) - return None + return ( self._db_project_object, @@ -118,7 +118,7 @@ def packages_config(self): def get_packages_config(self) -> Optional[PackageConfig]: logger.debug(f"Getting package_config:\n" f"\tproject: {self.project}\n") - package_config = PackageConfigGetter.get_package_config_from_repo( + return PackageConfigGetter.get_package_config_from_repo( base_project=None, project=self.project, pr_id=None, @@ -126,8 +126,6 @@ def get_packages_config(self) -> Optional[PackageConfig]: fail_when_missing=False, ) - return package_config - @property def project_url(self) -> Optional[str]: return ( diff --git a/packit_service/worker/events/pagure.py b/packit_service/worker/events/pagure.py index 670c66932..f6b93dcc3 100644 --- a/packit_service/worker/events/pagure.py +++ b/packit_service/worker/events/pagure.py @@ -40,7 +40,7 @@ def get_packages_config(self) -> Optional[PackageConfig]: f"\tdefault_branch: {self.project.default_branch}\n", ) - packages_config = PackageConfigGetter.get_package_config_from_repo( + return PackageConfigGetter.get_package_config_from_repo( base_project=None, project=self.project, pr_id=None, @@ -48,8 +48,6 @@ def get_packages_config(self) -> Optional[PackageConfig]: fail_when_missing=self.fail_when_config_file_missing, ) - return packages_config - class PushPagureEvent(AddBranchPushEventToDb, AbstractPagureEvent): def __init__( diff --git a/packit_service/worker/events/testing_farm.py b/packit_service/worker/events/testing_farm.py index 74193a982..826df0fdc 100644 --- a/packit_service/worker/events/testing_farm.py +++ b/packit_service/worker/events/testing_farm.py @@ -63,16 +63,20 @@ def get_dict(self, default_dict: Optional[dict] = None) -> dict: return result def get_db_project_object(self) -> Optional[AbstractProjectObjectDbType]: - run_model = TFTTestRunTargetModel.get_by_pipeline_id( + if run_model := TFTTestRunTargetModel.get_by_pipeline_id( pipeline_id=self.pipeline_id, - ) - return run_model.get_project_event_object() if run_model else None + ): + return run_model.get_project_event_object() + + return None def get_db_project_event(self) -> Optional[ProjectEventModel]: - run_model = TFTTestRunTargetModel.get_by_pipeline_id( + if run_model := TFTTestRunTargetModel.get_by_pipeline_id( pipeline_id=self.pipeline_id, - ) - return run_model.get_project_event_model() if run_model else None + ): + return run_model.get_project_event_model() + + return None def get_base_project(self) -> Optional[GitProject]: if self.pr_id is not None: @@ -83,6 +87,5 @@ def get_base_project(self) -> Optional[GitProject]: repo=self.project.repo, is_fork=True, ) - else: - return None # With Github app, we cannot work with fork repo + return None # With Github app, we cannot work with fork repo return self.project diff --git a/packit_service/worker/handlers/abstract.py b/packit_service/worker/handlers/abstract.py index 421a76d7f..c7c63d8a7 100644 --- a/packit_service/worker/handlers/abstract.py +++ b/packit_service/worker/handlers/abstract.py @@ -322,8 +322,8 @@ def get_package_name(self) -> Optional[str]: """ if len(self.package_config.packages) == 1: return list(self.package_config.packages.keys())[0] - else: - return None + + return None def run_job(self): """ diff --git a/packit_service/worker/handlers/bodhi.py b/packit_service/worker/handlers/bodhi.py index ca1009573..dd14b8870 100644 --- a/packit_service/worker/handlers/bodhi.py +++ b/packit_service/worker/handlers/bodhi.py @@ -169,12 +169,12 @@ def run(self) -> TaskResults: "msg": f"There was an error: {ex}. Task will be retried.", }, ) - else: - error = str(ex) - errors[target_model.target] = error - target_model.set_status("error") - target_model.set_data({"error": error}) + error = str(ex) + errors[target_model.target] = error + + target_model.set_status("error") + target_model.set_data({"error": error}) if errors: self.report_in_issue_repository(errors=errors) diff --git a/packit_service/worker/handlers/open_scan_hub.py b/packit_service/worker/handlers/open_scan_hub.py index ba63fa978..84e2ce3b2 100644 --- a/packit_service/worker/handlers/open_scan_hub.py +++ b/packit_service/worker/handlers/open_scan_hub.py @@ -64,11 +64,10 @@ def get_helper(self) -> OpenScanHubHelper: celery_task=self.celery_task, ) - scan_helper = OpenScanHubHelper( + return OpenScanHubHelper( copr_build_helper=build_helper, build=self.event.build, ) - return scan_helper def check_scan_and_build(self): task_id = self.data.event_dict["task_id"] @@ -79,7 +78,8 @@ def check_scan_and_build(self): "msg": f"Scan {task_id} not found or not associated with a Copr build", }, ) - elif not self.job_config: + + if not self.job_config: return TaskResults( success=True, details={ @@ -90,6 +90,8 @@ def check_scan_and_build(self): }, ) + return None + @configured_as(job_type=JobType.copr_build) @reacts_to(OpenScanHubTaskFinishedEvent) diff --git a/packit_service/worker/helpers/job_helper.py b/packit_service/worker/helpers/job_helper.py index 922e5268d..09b990b2f 100644 --- a/packit_service/worker/helpers/job_helper.py +++ b/packit_service/worker/helpers/job_helper.py @@ -74,11 +74,11 @@ def get_package_name(self) -> Optional[str]: Helpers should always have PackageConfigView(s) references which hold just a single package. """ - if len(self.package_config.packages) == 1: - return list(self.package_config.packages.keys())[0] - else: + if len(self.package_config.packages) != 1: return None + return list(self.package_config.packages.keys())[0] + @property def msg_retrigger(self) -> str: return "" diff --git a/packit_service/worker/helpers/testing_farm.py b/packit_service/worker/helpers/testing_farm.py index 26696288c..7e23d5d1c 100644 --- a/packit_service/worker/helpers/testing_farm.py +++ b/packit_service/worker/helpers/testing_farm.py @@ -249,8 +249,7 @@ def fmf_path(self) -> str: # Otherwise sanitize the path path = path.removeprefix("./") path = path.removeprefix("/") - path = path.removesuffix("/") - return path + return path.removesuffix("/") return "." @property @@ -1129,11 +1128,9 @@ def get_request_details(cls, request_id: str) -> dict[str, Any]: logger.error(msg) return {} - details = response.json() + return response.json() # logger.debug(f"Request/pipeline {request_id} details: {details}") - return details - def _handle_tf_submit_successful( self, test_run: TFTTestRunTargetModel, @@ -1267,11 +1264,10 @@ def get_copr_builds_from_other_pr( dict """ parsed_pr_argument = self._parse_comment_pr_argument() - if not parsed_pr_argument: return None - else: - namespace, repo, pr_id = parsed_pr_argument + + namespace, repo, pr_id = parsed_pr_argument # for now let's default to github.com project_url = f"https://github.com/{namespace}/{repo}" diff --git a/packit_service/worker/parser.py b/packit_service/worker/parser.py index c597a5aa0..7cfbcfaf6 100644 --- a/packit_service/worker/parser.py +++ b/packit_service/worker/parser.py @@ -375,7 +375,8 @@ def is_gitlab_push_a_create_event(event) -> bool: if not (ref and event.get("commits") and event.get("before") and actor): return False - elif event.get("after").startswith("0000000"): + + if event.get("after").startswith("0000000"): logger.info(f"GitLab push event on '{ref}' by {actor} to delete branch/tag") return False @@ -518,7 +519,8 @@ def parse_github_push_event(event) -> Optional[PushGitHubEvent]: if not (raw_ref and head_commit and before and pusher): return None - elif event.get("deleted"): + + if event.get("deleted"): logger.info( f"GitHub push event on '{raw_ref}' by {pusher} to delete branch", ) @@ -562,8 +564,7 @@ def parse_github_comment_event( """ if nested_get(event, "issue", "pull_request"): return Parser.parse_pull_request_comment_event(event) - else: - return Parser.parse_issue_comment_event(event) + return Parser.parse_issue_comment_event(event) @staticmethod def parse_pull_request_comment_event( @@ -674,8 +675,7 @@ def parse_gitlab_comment_event( """ if event.get("merge_request"): return Parser.parse_merge_request_comment_event(event) - else: - return Parser.parse_gitlab_issue_comment_event(event) + return Parser.parse_gitlab_issue_comment_event(event) @staticmethod def parse_gitlab_issue_comment_event(event) -> Optional[IssueCommentGitlabEvent]: diff --git a/packit_service/worker/reporting/reporters/base.py b/packit_service/worker/reporting/reporters/base.py index ec55c5afc..c633c8d0c 100644 --- a/packit_service/worker/reporting/reporters/base.py +++ b/packit_service/worker/reporting/reporters/base.py @@ -145,7 +145,7 @@ def report( logger.warning("No checks to set status for.") return - elif isinstance(check_names, str): + if isinstance(check_names, str): check_names = [check_names] for check in check_names: @@ -244,7 +244,8 @@ def _has_identical_comment( if comment.author.startswith(self._packit_user): if mode == DuplicateCheckMode.check_last_comment: return body == comment.body - elif ( + + if ( mode == DuplicateCheckMode.check_all_comments and body == comment.body ): diff --git a/ruff.toml b/ruff.toml index f0daee951..0cd225698 100644 --- a/ruff.toml +++ b/ruff.toml @@ -8,7 +8,7 @@ select = [ # "PERF",# Perflint "PIE", # flake8-pie # "PT", # flake8-pytest-style, would be nice to enable - # "RET", # flake8-return + "RET", # flake8-return # "RUF", # Ruff-specific rules # "SIM", # flake8-simplify "UP", # pyupgrade diff --git a/tests/conftest.py b/tests/conftest.py index 6bae5aa97..a42123585 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -573,7 +573,8 @@ def pytest_assertrepr_compare(op, left, right): schema = JobConfigSchema() return [str(DeepDiff(schema.dump(left), schema.dump(right)))] - elif ( + + if ( isinstance(left, PackageConfig) and isinstance(right, PackageConfig) and op == "==" @@ -582,6 +583,7 @@ def pytest_assertrepr_compare(op, left, right): schema = PackageConfigSchema() return [str(DeepDiff(schema.dump(left), schema.dump(right)))] + return None @pytest.fixture() diff --git a/tests/integration/test_listen_to_fedmsg.py b/tests/integration/test_listen_to_fedmsg.py index d86303e70..ca201403a 100644 --- a/tests/integration/test_listen_to_fedmsg.py +++ b/tests/integration/test_listen_to_fedmsg.py @@ -327,22 +327,22 @@ def test_copr_build_end( pr_comment_exists, ): def get_comments(*args, **kwargs): - if pr_comment_exists: - return [ - flexmock( - author="packit-as-a-service[bot]", - body="Congratulations! One of the builds has completed. :champagne:\n\n" - "You can install the built RPMs by following these steps:\n\n* " - "`sudo yum install -y dnf-plugins-core` on RHEL 8\n* " - "`sudo dnf install -y dnf-plugins-core` on Fedora\n* " - "`dnf copr enable packit/packit-service-hello-world-24`\n* " - "And now you can install the packages.\n\n" - "Please note that the RPMs should be used only in a testing environment.", - ), - ] - else: + if not pr_comment_exists: return [] + return [ + flexmock( + author="packit-as-a-service[bot]", + body="Congratulations! One of the builds has completed. :champagne:\n\n" + "You can install the built RPMs by following these steps:\n\n* " + "`sudo yum install -y dnf-plugins-core` on RHEL 8\n* " + "`sudo dnf install -y dnf-plugins-core` on Fedora\n* " + "`dnf copr enable packit/packit-service-hello-world-24`\n* " + "And now you can install the packages.\n\n" + "Please note that the RPMs should be used only in a testing environment.", + ), + ] + pr = flexmock(source_project=flexmock(), get_comments=get_comments) flexmock(GithubProject).should_receive("is_private").and_return(False) flexmock(GithubProject).should_receive("get_pr").and_return(pr) From 02157d80d2a5c241a860ea8a782105b1f4992d78 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Tue, 22 Oct 2024 14:29:58 +0200 Subject: [PATCH 09/13] ci(ruff): enable flake8-simplify Signed-off-by: Matej Focko --- ...a2d8_srpmbuildmodel_copr_related_fields.py | 2 +- ...40cb19_add_koji_build_scratch_attribute.py | 2 +- .../68ce6a306b30_add_koji_build_groups.py | 2 +- ...ba80_add_explicit_mapping_of_tf_to_copr.py | 2 +- ..._link_srpmbuildmodel_to_jobtriggermodel.py | 2 +- ...4fa_add_sync_release_pull_request_table.py | 2 +- ...23c9_allow_multiple_forges_in_allowlist.py | 2 +- ...02_drop_merge_duplicate_gitlab_projects.py | 2 +- .../9fe0e970880f_add_copr_build_groups.py | 2 +- ...c282_add_times_for_bodhi_update_targets.py | 2 +- alembic/versions/a5c06aa9ef30_add_runmodel.py | 2 +- .../a9c49475e9c7_add_testing_farm_groups.py | 2 +- ...19025_move_commit_sha_to_project_events.py | 2 +- alembic/versions/c6250555a36c_.py | 2 +- ..._add_tables_for_triggers_koji_and_tests.py | 2 +- ..._added_instance_url_field_to_gitproject.py | 2 +- ...bb806c3d4_add_project_url_to_gitproject.py | 2 +- packit_service/config.py | 3 +- packit_service/models.py | 2 +- packit_service/worker/checker/bodhi.py | 39 +++++++++---------- packit_service/worker/checker/distgit.py | 36 ++++++++--------- packit_service/worker/database.py | 10 +++-- packit_service/worker/handlers/bodhi.py | 13 ++++--- packit_service/worker/handlers/mixin.py | 9 +++-- packit_service/worker/jobs.py | 37 ++++++++++-------- packit_service/worker/mixin.py | 13 +++---- ruff.toml | 2 +- tests/integration/test_listen_to_fedmsg.py | 4 +- tests/unit/test_koji_build.py | 8 ++-- tests_openshift/database/test_models.py | 5 +-- 30 files changed, 109 insertions(+), 106 deletions(-) diff --git a/alembic/versions/0ad4d1c2a2d8_srpmbuildmodel_copr_related_fields.py b/alembic/versions/0ad4d1c2a2d8_srpmbuildmodel_copr_related_fields.py index f74aeea01..af437a323 100644 --- a/alembic/versions/0ad4d1c2a2d8_srpmbuildmodel_copr_related_fields.py +++ b/alembic/versions/0ad4d1c2a2d8_srpmbuildmodel_copr_related_fields.py @@ -29,7 +29,7 @@ from alembic import op from packit_service.models import ProjectAndEventsConnector -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/alembic/versions/46b37040cb19_add_koji_build_scratch_attribute.py b/alembic/versions/46b37040cb19_add_koji_build_scratch_attribute.py index 6bd3b887f..5b513de1f 100644 --- a/alembic/versions/46b37040cb19_add_koji_build_scratch_attribute.py +++ b/alembic/versions/46b37040cb19_add_koji_build_scratch_attribute.py @@ -24,7 +24,7 @@ depends_on = None -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/alembic/versions/68ce6a306b30_add_koji_build_groups.py b/alembic/versions/68ce6a306b30_add_koji_build_groups.py index d34e7ef7b..fd0fbc286 100644 --- a/alembic/versions/68ce6a306b30_add_koji_build_groups.py +++ b/alembic/versions/68ce6a306b30_add_koji_build_groups.py @@ -32,7 +32,7 @@ from alembic import op from packit_service.models import ProjectAndEventsConnector -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/alembic/versions/70c369f7ba80_add_explicit_mapping_of_tf_to_copr.py b/alembic/versions/70c369f7ba80_add_explicit_mapping_of_tf_to_copr.py index d21b2fd62..3379e7041 100644 --- a/alembic/versions/70c369f7ba80_add_explicit_mapping_of_tf_to_copr.py +++ b/alembic/versions/70c369f7ba80_add_explicit_mapping_of_tf_to_copr.py @@ -30,7 +30,7 @@ from alembic import op from packit_service.models import ProjectAndEventsConnector -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/alembic/versions/726cb0f70c6d_link_srpmbuildmodel_to_jobtriggermodel.py b/alembic/versions/726cb0f70c6d_link_srpmbuildmodel_to_jobtriggermodel.py index c6edef5a8..d9a0fb795 100644 --- a/alembic/versions/726cb0f70c6d_link_srpmbuildmodel_to_jobtriggermodel.py +++ b/alembic/versions/726cb0f70c6d_link_srpmbuildmodel_to_jobtriggermodel.py @@ -36,7 +36,7 @@ depends_on = None -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/alembic/versions/7d2b9fb924fa_add_sync_release_pull_request_table.py b/alembic/versions/7d2b9fb924fa_add_sync_release_pull_request_table.py index 7144fbd55..b5553a08b 100644 --- a/alembic/versions/7d2b9fb924fa_add_sync_release_pull_request_table.py +++ b/alembic/versions/7d2b9fb924fa_add_sync_release_pull_request_table.py @@ -20,7 +20,7 @@ from alembic import op -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/alembic/versions/800abbbb23c9_allow_multiple_forges_in_allowlist.py b/alembic/versions/800abbbb23c9_allow_multiple_forges_in_allowlist.py index 2f2b67f80..c76095476 100644 --- a/alembic/versions/800abbbb23c9_allow_multiple_forges_in_allowlist.py +++ b/alembic/versions/800abbbb23c9_allow_multiple_forges_in_allowlist.py @@ -25,7 +25,7 @@ # https://github.com/python/mypy/issues/2477#issuecomment-313984522 ^_^ -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/alembic/versions/8fee25b27402_drop_merge_duplicate_gitlab_projects.py b/alembic/versions/8fee25b27402_drop_merge_duplicate_gitlab_projects.py index 7c33ea597..f6a8d5f80 100644 --- a/alembic/versions/8fee25b27402_drop_merge_duplicate_gitlab_projects.py +++ b/alembic/versions/8fee25b27402_drop_merge_duplicate_gitlab_projects.py @@ -15,7 +15,7 @@ from alembic import op # https://github.com/python/mypy/issues/2477#issuecomment-313984522 ^_^ -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/alembic/versions/9fe0e970880f_add_copr_build_groups.py b/alembic/versions/9fe0e970880f_add_copr_build_groups.py index 39cae9ebe..72712affd 100644 --- a/alembic/versions/9fe0e970880f_add_copr_build_groups.py +++ b/alembic/versions/9fe0e970880f_add_copr_build_groups.py @@ -32,7 +32,7 @@ from alembic import op from packit_service.models import ProjectAndEventsConnector -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/alembic/versions/a3a17014c282_add_times_for_bodhi_update_targets.py b/alembic/versions/a3a17014c282_add_times_for_bodhi_update_targets.py index 3745af607..6c7f97af9 100644 --- a/alembic/versions/a3a17014c282_add_times_for_bodhi_update_targets.py +++ b/alembic/versions/a3a17014c282_add_times_for_bodhi_update_targets.py @@ -26,7 +26,7 @@ branch_labels = None depends_on = None -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/alembic/versions/a5c06aa9ef30_add_runmodel.py b/alembic/versions/a5c06aa9ef30_add_runmodel.py index 962a0598e..e64bfbec0 100644 --- a/alembic/versions/a5c06aa9ef30_add_runmodel.py +++ b/alembic/versions/a5c06aa9ef30_add_runmodel.py @@ -30,7 +30,7 @@ from alembic import op -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/alembic/versions/a9c49475e9c7_add_testing_farm_groups.py b/alembic/versions/a9c49475e9c7_add_testing_farm_groups.py index 540c502a7..3661db3aa 100644 --- a/alembic/versions/a9c49475e9c7_add_testing_farm_groups.py +++ b/alembic/versions/a9c49475e9c7_add_testing_farm_groups.py @@ -32,7 +32,7 @@ from alembic import op from packit_service.models import ProjectAndEventsConnector -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/alembic/versions/af00a7f19025_move_commit_sha_to_project_events.py b/alembic/versions/af00a7f19025_move_commit_sha_to_project_events.py index c92ec70e3..ea85305c6 100644 --- a/alembic/versions/af00a7f19025_move_commit_sha_to_project_events.py +++ b/alembic/versions/af00a7f19025_move_commit_sha_to_project_events.py @@ -23,7 +23,7 @@ from alembic import op -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/alembic/versions/c6250555a36c_.py b/alembic/versions/c6250555a36c_.py index bfbd936f8..cd60edfde 100644 --- a/alembic/versions/c6250555a36c_.py +++ b/alembic/versions/c6250555a36c_.py @@ -38,7 +38,7 @@ branch_labels = None depends_on = None -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/alembic/versions/d90948124e46_add_tables_for_triggers_koji_and_tests.py b/alembic/versions/d90948124e46_add_tables_for_triggers_koji_and_tests.py index 5aae56cd0..74b1d48c1 100644 --- a/alembic/versions/d90948124e46_add_tables_for_triggers_koji_and_tests.py +++ b/alembic/versions/d90948124e46_add_tables_for_triggers_koji_and_tests.py @@ -32,7 +32,7 @@ ) # https://github.com/python/mypy/issues/2477#issuecomment-313984522 ^_^ -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/alembic/versions/e35bb9ce7313_added_instance_url_field_to_gitproject.py b/alembic/versions/e35bb9ce7313_added_instance_url_field_to_gitproject.py index b4ab7e89e..6fe71d019 100644 --- a/alembic/versions/e35bb9ce7313_added_instance_url_field_to_gitproject.py +++ b/alembic/versions/e35bb9ce7313_added_instance_url_field_to_gitproject.py @@ -16,7 +16,7 @@ from alembic import op # https://github.com/python/mypy/issues/2477#issuecomment-313984522 ^_^ -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/alembic/versions/f0abb806c3d4_add_project_url_to_gitproject.py b/alembic/versions/f0abb806c3d4_add_project_url_to_gitproject.py index 1cd50bb0d..b05bce2a0 100644 --- a/alembic/versions/f0abb806c3d4_add_project_url_to_gitproject.py +++ b/alembic/versions/f0abb806c3d4_add_project_url_to_gitproject.py @@ -21,7 +21,7 @@ depends_on = None # https://github.com/python/mypy/issues/2477#issuecomment-313984522 ^_^ -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/packit_service/config.py b/packit_service/config.py index 453d8df36..a63e641f8 100644 --- a/packit_service/config.py +++ b/packit_service/config.py @@ -263,7 +263,8 @@ def get_service_config(cls) -> "ServiceConfig": logger.debug(f"Loading service config from: {config_file}") try: - loaded_config = safe_load(open(config_file)) + with open(config_file) as file_stream: + loaded_config = safe_load(file_stream) except Exception as ex: logger.error(f"Cannot load service config '{config_file}'.") raise PackitException(f"Cannot load service config: {ex}.") from ex diff --git a/packit_service/models.py b/packit_service/models.py index 7b894a403..7249c3551 100644 --- a/packit_service/models.py +++ b/packit_service/models.py @@ -265,7 +265,7 @@ def filter_most_recent_target_names_by_status( # https://github.com/python/mypy/issues/2477#issuecomment-313984522 ^_^ -if TYPE_CHECKING: +if TYPE_CHECKING: # noqa: SIM108 Base = object else: Base = declarative_base() diff --git a/packit_service/worker/checker/bodhi.py b/packit_service/worker/checker/bodhi.py index f658442f7..06ffb9540 100644 --- a/packit_service/worker/checker/bodhi.py +++ b/packit_service/worker/checker/bodhi.py @@ -177,24 +177,23 @@ def _pre_check(self) -> bool: class IsAuthorAPackager(ActorChecker, PackitAPIWithDownstreamMixin): def _pre_check(self) -> bool: - if self.data.event_type in (PullRequestCommentPagureEvent.__name__,): - if not self.is_packager(user=self.actor): - title = ( - "Re-triggering Bodhi update through dist-git comment in PR failed" - ) - msg = ( - f"Re-triggering Bodhi update via dist-git comment in **PR#{self.data.pr_id}**" - f" and project **{self.project_url}** is not allowed, user *{self.actor}* " - "is not a packager." - ) - logger.info(msg) - report_in_issue_repository( - issue_repository=self.job_config.issue_repository, - service_config=self.service_config, - title=title, - message=msg + MSG_GET_IN_TOUCH, - comment_to_existing=msg, - ) - return False + if self.data.event_type not in ( + PullRequestCommentPagureEvent.__name__, + ) or self.is_packager(user=self.actor): + return True - return True + title = "Re-triggering Bodhi update through dist-git comment in PR failed" + msg = ( + f"Re-triggering Bodhi update via dist-git comment in **PR#{self.data.pr_id}**" + f" and project **{self.project_url}** is not allowed, user *{self.actor}* " + "is not a packager." + ) + logger.info(msg) + report_in_issue_repository( + issue_repository=self.job_config.issue_repository, + service_config=self.service_config, + title=title, + message=msg + MSG_GET_IN_TOUCH, + comment_to_existing=msg, + ) + return False diff --git a/packit_service/worker/checker/distgit.py b/packit_service/worker/checker/distgit.py index 2eb426682..85782e538 100644 --- a/packit_service/worker/checker/distgit.py +++ b/packit_service/worker/checker/distgit.py @@ -50,19 +50,18 @@ def pre_check(self) -> bool: if self.data.event_type in ( PushPagureEvent.__name__, KojiBuildTagEvent.__name__, + ) and self.data.git_ref not in ( + configured_branches := get_branches( + *self.job_config.dist_git_branches, + default="main", + with_aliases=True, + ) ): - if self.data.git_ref not in ( - configured_branches := get_branches( - *self.job_config.dist_git_branches, - default="main", - with_aliases=True, - ) - ): - logger.info( - f"Skipping build on '{self.data.git_ref}'. " - f"Koji build configured only for '{configured_branches}'.", - ) - return False + logger.info( + f"Skipping build on '{self.data.git_ref}'. " + f"Koji build configured only for '{configured_branches}'.", + ) + return False if self.data.event_type in (PushPagureEvent.__name__,): if self.pull_request: @@ -183,13 +182,12 @@ class TaggedBuildIsNotABuildOfSelf(Checker): """ def pre_check(self) -> bool: - if self.data.event_type in (KojiBuildTagEvent.__name__,): - if ( - self.data.event_dict.get("package_name") - == self.job_config.downstream_package_name - ): - logger.info("Skipping build triggered by tagging a build of self.") - return False + if self.data.event_type in (KojiBuildTagEvent.__name__,) and ( + self.data.event_dict.get("package_name") + == self.job_config.downstream_package_name + ): + logger.info("Skipping build triggered by tagging a build of self.") + return False return True diff --git a/packit_service/worker/database.py b/packit_service/worker/database.py index 9081bce47..a502d4f9e 100644 --- a/packit_service/worker/database.py +++ b/packit_service/worker/database.py @@ -68,10 +68,12 @@ def gzip_file(file: Path) -> Path: """ compressed_file = Path(f"{file}.gz") try: - with file.open(mode="rb") as f_in: - with gzip_open(compressed_file, mode="wb") as f_out: - logger.info(f"Compressing {file} into {compressed_file}") - copyfileobj(f_in, f_out) + with file.open(mode="rb") as f_in, gzip_open( + compressed_file, + mode="wb", + ) as f_out: + logger.info(f"Compressing {file} into {compressed_file}") + copyfileobj(f_in, f_out) except OSError as e: logger.error(e) raise diff --git a/packit_service/worker/handlers/bodhi.py b/packit_service/worker/handlers/bodhi.py index dd14b8870..2413f6896 100644 --- a/packit_service/worker/handlers/bodhi.py +++ b/packit_service/worker/handlers/bodhi.py @@ -107,12 +107,13 @@ def run(self) -> TaskResults: for target_model in group.grouped_targets: try: existing_alias = None - if target_model.sidetag: - # get update alias from previous run(s) from the same sidetag (if any) - if model := BodhiUpdateTargetModel.get_first_successful_by_sidetag( + # get update alias from previous run(s) from the same sidetag (if any) + if target_model.sidetag and ( + model := BodhiUpdateTargetModel.get_first_successful_by_sidetag( target_model.sidetag, - ): - existing_alias = model.alias + ) + ): + existing_alias = model.alias logger.debug( ( @@ -231,7 +232,7 @@ def _get_or_create_bodhi_update_group_model(self) -> BodhiUpdateGroupModel: BodhiUpdateTargetModel.create( target=koji_build_data.dist_git_branch, - koji_nvrs=koji_build_data.nvr if not builds else builds, + koji_nvrs=builds if builds else koji_build_data.nvr, sidetag=sidetag.koji_name if sidetag else None, status="queued", bodhi_update_group=group, diff --git a/packit_service/worker/handlers/mixin.py b/packit_service/worker/handlers/mixin.py index e2777cfe2..84eea33ee 100644 --- a/packit_service/worker/handlers/mixin.py +++ b/packit_service/worker/handlers/mixin.py @@ -538,12 +538,13 @@ def dg_branch(self) -> str: @property def project_to_sync(self) -> Optional[ProjectToSync]: - if self._project_to_sync is None: - if project_to_sync := self.service_config.get_project_to_sync( + if self._project_to_sync is None and ( + project_to_sync := self.service_config.get_project_to_sync( dg_repo_name=self.dg_repo_name, dg_branch=self.dg_branch, - ): - self._project_to_sync = project_to_sync + ) + ): + self._project_to_sync = project_to_sync return self._project_to_sync diff --git a/packit_service/worker/jobs.py b/packit_service/worker/jobs.py index 87097b2ba..44ee5dee3 100644 --- a/packit_service/worker/jobs.py +++ b/packit_service/worker/jobs.py @@ -414,13 +414,13 @@ def is_packit_config_present(self) -> bool: # for propose-downstream we want to load the package config # from upstream repo and ProposeDownstreamHandler not in handlers + and (dist_git_package_config := self.search_distgit_config_in_issue()) ): - if dist_git_package_config := self.search_distgit_config_in_issue(): - ( - self.event.dist_git_project_url, - self.event._package_config, - ) = dist_git_package_config - return True + ( + self.event.dist_git_project_url, + self.event._package_config, + ) = dist_git_package_config + return True if not dist_git_package_config: self.event.fail_when_config_file_missing = True @@ -702,18 +702,21 @@ def compare_jobs_without_triggers(a, b): in (JobConfigTriggerType.commit, JobConfigTriggerType.koji_build) and self.event.job_config_trigger_type == JobConfigTriggerType.release - ): # avoid having duplicate koji_build jobs - if job.type != JobType.koji_build or not any( - j - for j in matching_jobs - if compare_jobs_without_triggers(job, j) - ): - # A koji_build/bodhi_update can be re-triggered by a - # comment in a issue in the repository issues - # after a failed release event - # (which has created the issue) - matching_jobs.append(job) + and ( + job.type != JobType.koji_build + or not any( + j + for j in matching_jobs + if compare_jobs_without_triggers(job, j) + ) + ) + ): + # A koji_build/bodhi_update can be re-triggered by a + # comment in a issue in the repository issues + # after a failed release event + # (which has created the issue) + matching_jobs.append(job) elif isinstance(self.event, KojiBuildTagEvent): # create a virtual job config job_config = JobConfig( diff --git a/packit_service/worker/mixin.py b/packit_service/worker/mixin.py index 4d1901f11..e08f12225 100644 --- a/packit_service/worker/mixin.py +++ b/packit_service/worker/mixin.py @@ -265,13 +265,12 @@ class GetPagurePullRequestMixin(GetPagurePullRequest): @property def pull_request(self): - if not self._pull_request: - if self.data.pr_id is not None: - logger.debug( - f"Getting pull request #{self.data.pr_id}" - f"for repo {self.project.namespace}/{self.project.repo}", - ) - self._pull_request = self.project.get_pr(self.data.pr_id) + if not self._pull_request and self.data.pr_id is not None: + logger.debug( + f"Getting pull request #{self.data.pr_id}" + f"for repo {self.project.namespace}/{self.project.repo}", + ) + self._pull_request = self.project.get_pr(self.data.pr_id) return self._pull_request def get_pr_author(self): diff --git a/ruff.toml b/ruff.toml index 0cd225698..993a3c9c7 100644 --- a/ruff.toml +++ b/ruff.toml @@ -10,7 +10,7 @@ select = [ # "PT", # flake8-pytest-style, would be nice to enable "RET", # flake8-return # "RUF", # Ruff-specific rules - # "SIM", # flake8-simplify + "SIM", # flake8-simplify "UP", # pyupgrade # "W", # pycodestyle Warning ] diff --git a/tests/integration/test_listen_to_fedmsg.py b/tests/integration/test_listen_to_fedmsg.py index ca201403a..0822f42b2 100644 --- a/tests/integration/test_listen_to_fedmsg.py +++ b/tests/integration/test_listen_to_fedmsg.py @@ -2526,8 +2526,8 @@ def test_koji_build_start_build_not_found(koji_build_scratch_start): assert len(processing_results) == 1 assert processing_results[0]["success"] assert ( - "No packit config found in the repository." - == processing_results[0]["details"]["msg"] + processing_results[0]["details"]["msg"] + == "No packit config found in the repository." ) diff --git a/tests/unit/test_koji_build.py b/tests/unit/test_koji_build.py index 0bd06422e..52405f897 100644 --- a/tests/unit/test_koji_build.py +++ b/tests/unit/test_koji_build.py @@ -248,8 +248,8 @@ def test_koji_build_failed_kerberos( response = helper.run_koji_build() assert not response["success"] assert ( - "Kerberos authentication error: the bad authentication error" - == response["details"]["msg"] + response["details"]["msg"] + == "Kerberos authentication error: the bad authentication error" ) @@ -313,8 +313,8 @@ def test_koji_build_target_not_supported( response = helper.run_koji_build() assert not response["success"] assert ( - "Target not supported: nonexisting-target" - == response["details"]["errors"]["nonexisting-target"] + response["details"]["errors"]["nonexisting-target"] + == "Target not supported: nonexisting-target" ) diff --git a/tests_openshift/database/test_models.py b/tests_openshift/database/test_models.py index 2f5a13470..782b53a2f 100644 --- a/tests_openshift/database/test_models.py +++ b/tests_openshift/database/test_models.py @@ -1,5 +1,6 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT +import contextlib from datetime import datetime, timedelta import pytest @@ -275,15 +276,13 @@ def test_get_or_create_pr(clean_before_and_after): def test_errors_while_doing_db(clean_before_and_after): with sa_session_transaction() as session: - try: + with contextlib.suppress(ProgrammingError): PullRequestModel.get_or_create( pr_id="nope", namespace="", repo_name=False, project_url="https://github.com/the-namespace/the-repo", ) - except ProgrammingError: - pass assert len(session.query(PullRequestModel).all()) == 0 PullRequestModel.get_or_create( pr_id=111, From 2f1231e5212d3fa8c3e92cdf07eb966b8e6ee74a Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Tue, 22 Oct 2024 14:38:14 +0200 Subject: [PATCH 10/13] ci(ruff): enable pyflakes And disable discrete flake8 Signed-off-by: Matej Focko --- .pre-commit-config.yaml | 8 -------- files/packit.wsgi | 2 +- ruff.toml | 9 +++++---- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index aa0dceaef..324dc1bac 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -31,14 +31,6 @@ repos: - id: end-of-file-fixer - id: mixed-line-ending - id: trailing-whitespace - - repo: https://github.com/PyCQA/flake8 - rev: 7.1.1 - hooks: - - id: flake8 - args: - - --max-line-length=100 - - --per-file-ignores=files/packit.wsgi:F401,E402 - - --extend-ignore=E701 # conflicting with black - repo: https://github.com/pre-commit/mirrors-mypy rev: v1.11.2 hooks: diff --git a/files/packit.wsgi b/files/packit.wsgi index c0d9a62e6..aa1c7cd16 100644 --- a/files/packit.wsgi +++ b/files/packit.wsgi @@ -1 +1 @@ -from packit_service.service.app import application +from packit_service.service.app import application # noqa: F401, E402 diff --git a/ruff.toml b/ruff.toml index 993a3c9c7..6003a89c1 100644 --- a/ruff.toml +++ b/ruff.toml @@ -3,7 +3,7 @@ select = [ "C4", # flake8-comprehensions "COM", # flake8-commas # "E", # pycodestyle Error - # "F", # Pyflakes + "F", # Pyflakes "I", # isort # "PERF",# Perflint "PIE", # flake8-pie @@ -15,9 +15,10 @@ select = [ # "W", # pycodestyle Warning ] ignore = [ - "B017", # assert-raises-exception - "B022", # useless-contextlib-suppress - "RUF003"# Comment contains ambiguous character + "B017", # assert-raises-exception + "B022", # useless-contextlib-suppress + "RUF003", # Comment contains ambiguous character + "E701", # Multiple statements on one line (colon) ] line-length = 100 From 044ce0d14a1d854b5af0100e1e08dd1d75dcc4c7 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Tue, 22 Oct 2024 14:47:05 +0200 Subject: [PATCH 11/13] ci(ruff): enable pycodestyle Error and Warning Signed-off-by: Matej Focko --- packit_service/worker/jobs.py | 6 ++++-- packit_service/worker/mixin.py | 9 ++++++--- ruff.toml | 4 ++-- tests/integration/test_issue_comment.py | 24 ++++++++++++++++-------- tests_openshift/service/test_api.py | 2 +- 5 files changed, 29 insertions(+), 16 deletions(-) diff --git a/packit_service/worker/jobs.py b/packit_service/worker/jobs.py index 44ee5dee3..25808908c 100644 --- a/packit_service/worker/jobs.py +++ b/packit_service/worker/jobs.py @@ -365,11 +365,13 @@ def search_distgit_config_in_issue(self) -> Optional[tuple[str, PackageConfig]]: the issue description for the issue comment event. The issue description should have a format like the following: ``` - Packit failed on creating pull-requests in dist-git (https://src.fedoraproject.org/rpms/python-teamcity-messages): # noqa + Packit failed on creating pull-requests in dist-git + (https://src.fedoraproject.org/rpms/python-teamcity-messages): | dist-git branch | error | | --------------- | ----- | | `f37` | `` | - You can retrigger the update by adding a comment (`/packit propose-downstream`) into this issue. + You can retrigger the update by adding a comment + (`/packit propose-downstream`) into this issue. ``` Returns: diff --git a/packit_service/worker/mixin.py b/packit_service/worker/mixin.py index e08f12225..2c0f602a3 100644 --- a/packit_service/worker/mixin.py +++ b/packit_service/worker/mixin.py @@ -305,15 +305,18 @@ class GetBranchesFromIssueMixin(Config, GetBranches): def branches(self) -> list[str]: """Get branches names from an issue comment like the following: - - Packit failed on creating pull-requests in dist-git (https://src.fedoraproject.org/rpms/python-teamcity-messages): # noqa + ``` + Packit failed on creating pull-requests in dist-git + (https://src.fedoraproject.org/rpms/python-teamcity-messages): | dist-git branch | error | | --------------- | ----- | | `f37` | `` | - You can retrigger the update by adding a comment (`/packit propose-downstream`) into this issue. + You can retrigger the update by adding a comment + (`/packit propose-downstream`) into this issue. + ``` """ branches = set() branch_regex = re.compile(r"\s*\| `(\S+)` \|") diff --git a/ruff.toml b/ruff.toml index 6003a89c1..bb598d5e5 100644 --- a/ruff.toml +++ b/ruff.toml @@ -2,7 +2,7 @@ select = [ "B", # flake8-bugbear "C4", # flake8-comprehensions "COM", # flake8-commas - # "E", # pycodestyle Error + "E", # pycodestyle Error "F", # Pyflakes "I", # isort # "PERF",# Perflint @@ -12,7 +12,7 @@ select = [ # "RUF", # Ruff-specific rules "SIM", # flake8-simplify "UP", # pyupgrade - # "W", # pycodestyle Warning + "W", # pycodestyle Warning ] ignore = [ "B017", # assert-raises-exception diff --git a/tests/integration/test_issue_comment.py b/tests/integration/test_issue_comment.py index 22ce5152b..9af499785 100644 --- a/tests/integration/test_issue_comment.py +++ b/tests/integration/test_issue_comment.py @@ -317,14 +317,22 @@ def mock_repository_issue_retriggering(): flexmock(GithubProject).should_receive("is_private").and_return(False) issue = flexmock( - description=""" -Packit failed on creating pull-requests in dist-git (https://src.fedoraproject.org/rpms/python-teamcity-messages): # noqa -| dist-git branch | error | -| --------------- | ----- | -| `f37` | `` | -| `f38` | `` | -You can retrigger the update by adding a comment (`/packit propose-downstream`) into this issue. - """, + description="\n".join( + ( + ( + "Packit failed on creating pull-requests in dist-git" + " (https://src.fedoraproject.org/rpms/python-teamcity-messages):" + ), + "| dist-git branch | error |", + "| --------------- | ----- |", + "| `f37` | `` |", + "| `f38` | `` |", + ( + "You can retrigger the update by adding a comment" + " (`/packit propose-downstream`) into this issue." + ), + ), + ), get_comments=list, comment=lambda message: None, ) diff --git a/tests_openshift/service/test_api.py b/tests_openshift/service/test_api.py index ea480e5cf..7a7b51c24 100644 --- a/tests_openshift/service/test_api.py +++ b/tests_openshift/service/test_api.py @@ -238,7 +238,7 @@ def test_srpm_builds_list(client, clean_before_and_after, a_copr_build_for_pr): ) response_dict = response.json assert response_dict[0]["status"] == "success" - assert type(response_dict[0]["srpm_build_id"]) is int + assert isinstance(response_dict[0]["srpm_build_id"], int) assert response_dict[0]["log_url"] is not None assert response_dict[0]["repo_namespace"] == SampleValues.repo_namespace assert response_dict[0]["repo_name"] == SampleValues.repo_name From 9a612275d8e3cbea9d40d3715d60ecc44057b39a Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Tue, 22 Oct 2024 14:51:10 +0200 Subject: [PATCH 12/13] ci(ruff): enable perflint Signed-off-by: Matej Focko --- .../9fe0e970880f_add_copr_build_groups.py | 2 +- .../service/api/propose_downstream.py | 15 +++--- .../service/api/pull_from_upstream.py | 15 +++--- packit_service/service/tasks.py | 2 +- packit_service/worker/jobs.py | 17 ++++--- ruff.toml | 2 +- tests/unit/test_testing_farm.py | 50 +++++++++---------- 7 files changed, 53 insertions(+), 50 deletions(-) diff --git a/alembic/versions/9fe0e970880f_add_copr_build_groups.py b/alembic/versions/9fe0e970880f_add_copr_build_groups.py index 72712affd..de7619184 100644 --- a/alembic/versions/9fe0e970880f_add_copr_build_groups.py +++ b/alembic/versions/9fe0e970880f_add_copr_build_groups.py @@ -383,7 +383,7 @@ def upgrade(): for copr_build in session.query(CoprBuildTargetModel): groups[copr_build.build_id].append(copr_build.id) - for _, ids in groups.items(): + for ids in groups.values(): group = CoprBuildGroupModel() for copr_model_id in ids: diff --git a/packit_service/service/api/propose_downstream.py b/packit_service/service/api/propose_downstream.py index 6f9171a11..b9b7e4759 100644 --- a/packit_service/service/api/propose_downstream.py +++ b/packit_service/service/api/propose_downstream.py @@ -30,14 +30,15 @@ class ProposeDownstreamList(Resource): def get(self): """List of all Propose Downstreams results.""" - result = [] first, last = indices() - for propose_downstream_results in SyncReleaseModel.get_range( - first, - last, - job_type=SyncReleaseJobType.propose_downstream, - ): - result.append(get_sync_release_info(propose_downstream_results)) + result = [ + get_sync_release_info(propose_downstream_results) + for propose_downstream_results in SyncReleaseModel.get_range( + first, + last, + job_type=SyncReleaseJobType.propose_downstream, + ) + ] resp = response_maker(result, status=HTTPStatus.PARTIAL_CONTENT) resp.headers["Content-Range"] = f"propose-downstreams {first + 1}-{last}/*" diff --git a/packit_service/service/api/pull_from_upstream.py b/packit_service/service/api/pull_from_upstream.py index 5452ca6cd..154d18475 100644 --- a/packit_service/service/api/pull_from_upstream.py +++ b/packit_service/service/api/pull_from_upstream.py @@ -30,14 +30,15 @@ class PullFromUpstreamList(Resource): def get(self): """List of all Pull from upstream results.""" - result = [] first, last = indices() - for pull_results in SyncReleaseModel.get_range( - first, - last, - job_type=SyncReleaseJobType.pull_from_upstream, - ): - result.append(get_sync_release_info(pull_results)) + result = [ + get_sync_release_info(pull_results) + for pull_results in SyncReleaseModel.get_range( + first, + last, + job_type=SyncReleaseJobType.pull_from_upstream, + ) + ] resp = response_maker(result, status=HTTPStatus.PARTIAL_CONTENT) resp.headers["Content-Range"] = f"pull-from-upstreams {first + 1}-{last}/*" diff --git a/packit_service/service/tasks.py b/packit_service/service/tasks.py index ce57af3dd..832b58437 100644 --- a/packit_service/service/tasks.py +++ b/packit_service/service/tasks.py @@ -110,7 +110,7 @@ def get_usage_interval_data( ) onboarded_projects_per_job = {} - for job, _ in past_data["jobs"].items(): + for job in past_data["jobs"]: onboarded_projects_per_job[job] = list( cumulative_projects_for_jobs[job] - cumulative_projects_for_jobs_past[job], ) diff --git a/packit_service/worker/jobs.py b/packit_service/worker/jobs.py index 25808908c..5d106ad84 100644 --- a/packit_service/worker/jobs.py +++ b/packit_service/worker/jobs.py @@ -901,18 +901,21 @@ def get_config_for_handler_kls( """ jobs_matching_trigger: list[JobConfig] = self.get_jobs_matching_event() - matching_jobs: list[JobConfig] = [] - for job in jobs_matching_trigger: - if handler_kls in MAP_JOB_TYPE_TO_HANDLER[job.type]: - matching_jobs.append(job) + matching_jobs: list[JobConfig] = [ + job + for job in jobs_matching_trigger + if handler_kls in MAP_JOB_TYPE_TO_HANDLER[job.type] + ] if not matching_jobs: logger.debug( "No config found, let's see the jobs that requires this handler.", ) - for job in jobs_matching_trigger: - if handler_kls in MAP_REQUIRED_JOB_TYPE_TO_HANDLER[job.type]: - matching_jobs.append(job) + matching_jobs = [ + job + for job in jobs_matching_trigger + if handler_kls in MAP_REQUIRED_JOB_TYPE_TO_HANDLER[job.type] + ] if not matching_jobs: logger.warning( diff --git a/ruff.toml b/ruff.toml index bb598d5e5..e5e7269d6 100644 --- a/ruff.toml +++ b/ruff.toml @@ -5,7 +5,7 @@ select = [ "E", # pycodestyle Error "F", # Pyflakes "I", # isort - # "PERF",# Perflint + "PERF",# Perflint "PIE", # flake8-pie # "PT", # flake8-pytest-style, would be nice to enable "RET", # flake8-return diff --git a/tests/unit/test_testing_farm.py b/tests/unit/test_testing_farm.py index 27b8fd3db..4f6d85817 100644 --- a/tests/unit/test_testing_farm.py +++ b/tests/unit/test_testing_farm.py @@ -1365,20 +1365,19 @@ def test_trigger_build(copr_build, wait_for_build): TaskResults(success=True, details={}), ).twice() targets = {"target-x86_64", "another-target-x86_64"} - tests = [] - for target in targets: - tests.append( - flexmock( - copr_builds=[ - flexmock( - id=1, - status=copr_build.status if copr_build else BuildStatus.pending, - ), - ], - target=target, - status=TestingFarmResult.new, - ), + tests = [ + flexmock( + copr_builds=[ + flexmock( + id=1, + status=copr_build.status if copr_build else BuildStatus.pending, + ), + ], + target=target, + status=TestingFarmResult.new, ) + for target in targets + ] flexmock(TFTTestRunTargetModel).should_receive("create").and_return( *tests, ).one_by_one() @@ -1451,20 +1450,19 @@ def test_trigger_build_manual_tests_dont_report(): flexmock(TFJobHelper).should_receive("get_latest_copr_build").and_return(copr_build) targets = {"target-x86_64", "another-target-x86_64"} - tests = [] - for target in targets: - tests.append( - flexmock( - copr_builds=[ - flexmock( - id=1, - status=copr_build.status if copr_build else BuildStatus.pending, - ), - ], - target=target, - status=TestingFarmResult.new, - ), + tests = [ + flexmock( + copr_builds=[ + flexmock( + id=1, + status=copr_build.status if copr_build else BuildStatus.pending, + ), + ], + target=target, + status=TestingFarmResult.new, ) + for target in targets + ] flexmock(TFTTestRunTargetModel).should_receive("create").and_return( *tests, ).one_by_one() From 47b45d8247efc543be86327ca255cf2d60b566e3 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Tue, 22 Oct 2024 14:58:03 +0200 Subject: [PATCH 13/13] ci(ruff): enable Ruff-specific rules Signed-off-by: Matej Focko --- files/packit.wsgi | 2 +- packit_service/config.py | 16 ++++++------- packit_service/models.py | 22 ++++++++--------- packit_service/worker/events/copr.py | 2 +- packit_service/worker/events/event.py | 7 +++--- packit_service/worker/events/koji.py | 2 +- packit_service/worker/events/open_scan_hub.py | 2 +- packit_service/worker/handlers/abstract.py | 4 ++-- packit_service/worker/handlers/copr.py | 3 ++- packit_service/worker/handlers/usage.py | 4 ++-- packit_service/worker/helpers/job_helper.py | 10 ++++---- .../sync_release/propose_downstream.py | 14 +++++------ .../helpers/sync_release/sync_release.py | 2 +- packit_service/worker/helpers/testing_farm.py | 24 +++++++++---------- packit_service/worker/mixin.py | 4 ++-- packit_service/worker/parser.py | 4 ++-- packit_service/worker/reporting/news.py | 3 ++- .../worker/reporting/reporters/base.py | 6 ++--- .../worker/reporting/reporters/github.py | 6 ++--- .../worker/reporting/reporters/gitlab.py | 2 +- .../worker/reporting/reporters/pagure.py | 2 +- packit_service/worker/result.py | 4 ++-- packit_service/worker/tasks.py | 9 ++++--- ruff.toml | 3 ++- tests/unit/test_build_helper.py | 6 ++--- tests_openshift/conftest.py | 10 +++++--- 26 files changed, 92 insertions(+), 81 deletions(-) diff --git a/files/packit.wsgi b/files/packit.wsgi index aa1c7cd16..28641e7be 100644 --- a/files/packit.wsgi +++ b/files/packit.wsgi @@ -1 +1 @@ -from packit_service.service.app import application # noqa: F401, E402 +from packit_service.service.app import application # noqa: F401 diff --git a/packit_service/config.py b/packit_service/config.py index a63e641f8..bf6231460 100644 --- a/packit_service/config.py +++ b/packit_service/config.py @@ -97,19 +97,19 @@ def __init__( testing_farm_api_url: str = "", internal_testing_farm_secret: str = "", validate_webhooks: bool = True, - admins: list = None, + admins: Optional[list] = None, fas_password: Optional[str] = "", - enabled_private_namespaces: Union[set[str], list[str]] = None, + enabled_private_namespaces: Optional[Union[set[str], list[str]]] = None, gitlab_token_secret: str = "", - gitlab_mr_targets_handled: list[MRTarget] = None, - projects_to_sync: list[ProjectToSync] = None, - enabled_projects_for_internal_tf: Union[set[str], list[str]] = None, + gitlab_mr_targets_handled: Optional[list[MRTarget]] = None, + projects_to_sync: Optional[list[ProjectToSync]] = None, + enabled_projects_for_internal_tf: Optional[Union[set[str], list[str]]] = None, dashboard_url: str = "", koji_logs_url: str = "https://kojipkgs.fedoraproject.org", koji_web_url: str = "https://koji.fedoraproject.org", - enabled_projects_for_srpm_in_copr: Union[set[str], list[str]] = None, + enabled_projects_for_srpm_in_copr: Optional[Union[set[str], list[str]]] = None, comment_command_prefix: str = "/packit", - redhat_api_refresh_token: str = None, + redhat_api_refresh_token: Optional[str] = None, package_config_path_override: Optional[str] = None, command_handler_storage_class: Optional[str] = None, appcode: Optional[str] = None, @@ -326,7 +326,7 @@ def get_package_config_from_repo( project: GitProject, reference: Optional[str] = None, base_project: Optional[GitProject] = None, - pr_id: int = None, + pr_id: Optional[int] = None, fail_when_missing: bool = True, ) -> Optional[PackageConfig]: """ diff --git a/packit_service/models.py b/packit_service/models.py index 7249c3551..d0eac61a5 100644 --- a/packit_service/models.py +++ b/packit_service/models.py @@ -1901,7 +1901,7 @@ class PipelineModel(Base): def create( cls, project_event: ProjectEventModel, - package_name: str = None, + package_name: Optional[str] = None, ) -> "PipelineModel": """Create a pipeline triggered by the given project_event. If project is a monorepo, then specify for which @@ -2219,7 +2219,7 @@ def get_all_by_status(cls, status: BuildStatus) -> Iterable["CoprBuildTargetMode def get_by_build_id( cls, build_id: Union[str, int], - target: str = None, + target: Optional[str] = None, ) -> Optional["CoprBuildTargetModel"]: if isinstance(build_id, int): # PG is pesky about this: @@ -2236,9 +2236,9 @@ def get_by_build_id( @staticmethod def get_all_by( commit_sha: str, - project_name: str = None, - owner: str = None, - target: str = None, + project_name: Optional[str] = None, + owner: Optional[str] = None, + target: Optional[str] = None, status: BuildStatus = None, ) -> Iterable["CoprBuildTargetModel"]: """ @@ -2663,7 +2663,7 @@ def get_range( cls, first: int, last: int, - scratch: bool = None, + scratch: Optional[bool] = None, ) -> Iterable["KojiBuildTargetModel"]: with sa_session_transaction() as session: query = session.query(KojiBuildTargetModel).order_by( @@ -3164,7 +3164,7 @@ def create( target: str, test_run_group: "TFTTestRunGroupModel", web_url: Optional[str] = None, - data: dict = None, + data: Optional[dict] = None, identifier: Optional[str] = None, copr_build_targets: Optional[list[CoprBuildTargetModel]] = None, ) -> "TFTTestRunTargetModel": @@ -3213,7 +3213,7 @@ def get_by_id(cls, id: int) -> Optional["TFTTestRunTargetModel"]: @staticmethod def get_all_by_commit_target( commit_sha: str, - target: str = None, + target: Optional[str] = None, ) -> Iterable["TFTTestRunTargetModel"]: """ All tests with the given commit_sha and optional target. @@ -3806,7 +3806,7 @@ def get_all_by_status( def get_by_build_id( cls, build_id: Union[str, int], - target: str = None, + target: Optional[str] = None, ) -> Optional["VMImageBuildTargetModel"]: """Returns the build matching the build_id and the target""" @@ -3826,8 +3826,8 @@ def get_by_build_id( def get_all_by( project_name: str, commit_sha: str, - owner: str = None, - target: str = None, + owner: Optional[str] = None, + target: Optional[str] = None, ) -> Iterable["VMImageBuildTargetModel"]: """All owner/project_name builds sorted from latest to oldest with the given commit_sha and optional target. diff --git a/packit_service/worker/events/copr.py b/packit_service/worker/events/copr.py index 3dfa4e458..d20c7d41c 100644 --- a/packit_service/worker/events/copr.py +++ b/packit_service/worker/events/copr.py @@ -145,7 +145,7 @@ def pre_check(self): return True def get_non_serializable_attributes(self): - return super().get_non_serializable_attributes() + ["build"] + return [*super().get_non_serializable_attributes(), "build"] def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() diff --git a/packit_service/worker/events/event.py b/packit_service/worker/events/event.py index a8f4cff43..0d005fd2b 100644 --- a/packit_service/worker/events/event.py +++ b/packit_service/worker/events/event.py @@ -339,7 +339,7 @@ class Event: task_accepted_time: Optional[datetime] = None actor: Optional[str] - def __init__(self, created_at: Union[int, float, str] = None): + def __init__(self, created_at: Optional[Union[int, float, str]] = None): self.created_at: datetime if created_at: if isinstance(created_at, (int, float)): @@ -534,7 +534,7 @@ class AbstractForgeIndependentEvent(Event): def __init__( self, - created_at: Union[int, float, str] = None, + created_at: Optional[Union[int, float, str]] = None, project_url=None, pr_id: Optional[int] = None, actor: Optional[str] = None, @@ -643,7 +643,8 @@ def get_all_build_targets_by_status( ) def get_non_serializable_attributes(self): - return super().get_non_serializable_attributes() + [ + return [ + *super().get_non_serializable_attributes(), "fail_when_config_file_missing", "_pull_request_object", ] diff --git a/packit_service/worker/events/koji.py b/packit_service/worker/events/koji.py index da6e51aa8..2104b8fbc 100644 --- a/packit_service/worker/events/koji.py +++ b/packit_service/worker/events/koji.py @@ -395,4 +395,4 @@ def from_event_dict(cls, event: dict) -> "KojiBuildTagEvent": ) def get_non_serializable_attributes(self): - return super().get_non_serializable_attributes() + ["_koji_helper"] + return [*super().get_non_serializable_attributes(), "_koji_helper"] diff --git a/packit_service/worker/events/open_scan_hub.py b/packit_service/worker/events/open_scan_hub.py index 22ce9491a..9f44c4a38 100644 --- a/packit_service/worker/events/open_scan_hub.py +++ b/packit_service/worker/events/open_scan_hub.py @@ -62,7 +62,7 @@ def get_project(self) -> GitProject: def get_non_serializable_attributes(self): # build and scan are not serializable - return super().get_non_serializable_attributes() + ["build", "scan"] + return [*super().get_non_serializable_attributes(), "build", "scan"] class OpenScanHubTaskFinishedEvent(OpenScanHubTaskAbstractEvent): diff --git a/packit_service/worker/handlers/abstract.py b/packit_service/worker/handlers/abstract.py index c7c63d8a7..2fc112b61 100644 --- a/packit_service/worker/handlers/abstract.py +++ b/packit_service/worker/handlers/abstract.py @@ -321,7 +321,7 @@ def get_package_name(self) -> Optional[str]: references which hold just a single package. """ if len(self.package_config.packages) == 1: - return list(self.package_config.packages.keys())[0] + return next(iter(self.package_config.packages.keys())) return None @@ -333,7 +333,7 @@ def run_job(self): job_type = ( self.job_config.type.value if self.job_config else self.task_name.value ) - logger.debug(f"Running handler {str(self)} for {job_type}") + logger.debug(f"Running handler {self!s} for {job_type}") job_results: dict[str, TaskResults] = {} current_time = datetime.now().strftime(DATETIME_FORMAT) result_key = f"{job_type}-{current_time}" diff --git a/packit_service/worker/handlers/copr.py b/packit_service/worker/handlers/copr.py index 8af9714f2..bf56a1f76 100644 --- a/packit_service/worker/handlers/copr.py +++ b/packit_service/worker/handlers/copr.py @@ -150,7 +150,8 @@ class CoprBuildStartHandler(AbstractCoprBuildReportHandler): @staticmethod def get_checkers() -> tuple[type[Checker], ...]: - return super(CoprBuildStartHandler, CoprBuildStartHandler).get_checkers() + ( + return ( + *super(CoprBuildStartHandler, CoprBuildStartHandler).get_checkers(), BuildNotAlreadyStarted, ) diff --git a/packit_service/worker/handlers/usage.py b/packit_service/worker/handlers/usage.py index 54084ec19..6e68aa049 100644 --- a/packit_service/worker/handlers/usage.py +++ b/packit_service/worker/handlers/usage.py @@ -17,11 +17,11 @@ def check_onboarded_projects(projects: set[GitProjectModel]): if downstream_project_url != "https://src.fedoraproject.org": continue - pagure_service = [ + pagure_service = next( service for service in ServiceConfig.get_service_config().services if service.instance_url == downstream_project_url - ][0] + ) ogr_project = pagure_service.get_project( namespace=project.namespace, repo=project.repo_name, diff --git a/packit_service/worker/helpers/job_helper.py b/packit_service/worker/helpers/job_helper.py index 09b990b2f..cef3d587e 100644 --- a/packit_service/worker/helpers/job_helper.py +++ b/packit_service/worker/helpers/job_helper.py @@ -77,7 +77,7 @@ def get_package_name(self) -> Optional[str]: if len(self.package_config.packages) != 1: return None - return list(self.package_config.packages.keys())[0] + return next(iter(self.package_config.packages.keys())) @property def msg_retrigger(self) -> str: @@ -198,9 +198,9 @@ def _report( description: str, url: str = "", check_names: Union[str, list, None] = None, - markdown_content: str = None, + markdown_content: Optional[str] = None, links_to_external_services: Optional[dict[str, str]] = None, - update_feedback_time: Callable = None, + update_feedback_time: Optional[Callable] = None, ) -> None: """ The status reporting should be done through this method @@ -238,9 +238,9 @@ def report_status_to_configured_job( description: str, state: BaseCommitStatus, url: str = "", - markdown_content: str = None, + markdown_content: Optional[str] = None, links_to_external_services: Optional[dict[str, str]] = None, - update_feedback_time: Callable = None, + update_feedback_time: Optional[Callable] = None, ): """ Report status to the particular job from job_config attribute of the helper. diff --git a/packit_service/worker/helpers/sync_release/propose_downstream.py b/packit_service/worker/helpers/sync_release/propose_downstream.py index 5d1b61bed..2502c1ac7 100644 --- a/packit_service/worker/helpers/sync_release/propose_downstream.py +++ b/packit_service/worker/helpers/sync_release/propose_downstream.py @@ -55,7 +55,7 @@ def report_status_for_branch( description: str, state: BaseCommitStatus, url: str = "", - markdown_content: str = None, + markdown_content: Optional[str] = None, ): if self.job and branch in self.branches: cs = self.get_check(branch) @@ -70,7 +70,7 @@ def report_status_for_branch( @classmethod def get_check_cls( cls, - branch: str = None, + branch: Optional[str] = None, project_event_identifier: Optional[str] = None, identifier: Optional[str] = None, ) -> str: @@ -83,7 +83,7 @@ def get_check_cls( optional_suffix = f":{identifier}" if identifier else "" return f"{cls.status_name}{trigger_str}{branch_str}{optional_suffix}" - def get_check(self, branch: str = None) -> str: + def get_check(self, branch: Optional[str] = None) -> str: return self.get_check_cls(branch, identifier=self.job_config.identifier) @property @@ -106,9 +106,9 @@ def report_status_to_all( description: str, state: BaseCommitStatus, url: str = "", - markdown_content: str = None, + markdown_content: Optional[str] = None, links_to_external_services: Optional[dict[str, str]] = None, - update_feedback_time: Callable = None, + update_feedback_time: Optional[Callable] = None, ) -> None: if self.job_type: self._report( @@ -126,9 +126,9 @@ def report_status_to_configured_job( description: str, state: BaseCommitStatus, url: str = "", - markdown_content: str = None, + markdown_content: Optional[str] = None, links_to_external_services: Optional[dict[str, str]] = None, - update_feedback_time: Callable = None, + update_feedback_time: Optional[Callable] = None, ): self.report_status_to_all( description=description, diff --git a/packit_service/worker/helpers/sync_release/sync_release.py b/packit_service/worker/helpers/sync_release/sync_release.py index b6d26625e..bc30481c3 100644 --- a/packit_service/worker/helpers/sync_release/sync_release.py +++ b/packit_service/worker/helpers/sync_release/sync_release.py @@ -101,7 +101,7 @@ def job(self) -> Optional[JobConfig]: :return: JobConfig or None """ if not self._job: - for job in [self.job_config] + self.package_config.jobs: + for job in [self.job_config, *self.package_config.jobs]: if are_job_types_same(job.type, self.job_type) and ( self._db_project_object and ( diff --git a/packit_service/worker/helpers/testing_farm.py b/packit_service/worker/helpers/testing_farm.py index 7e23d5d1c..a847f59c9 100644 --- a/packit_service/worker/helpers/testing_farm.py +++ b/packit_service/worker/helpers/testing_farm.py @@ -448,7 +448,7 @@ def _merge_payload_with_extra_params(cls, payload: Any, params: Any): def is_final(v): return not isinstance(v, list) and not isinstance(v, dict) - if type(payload) != type(params): # noqa: E721 + if type(payload) != type(params): # Incompatible types, no way to merge this return @@ -1058,8 +1058,8 @@ def prepare_and_send_tf_request( def send_testing_farm_request( self, endpoint: str, - method: str = None, - params: dict = None, + method: Optional[str] = None, + params: Optional[dict] = None, data=None, ) -> RequestResponse: method = method or "GET" @@ -1379,7 +1379,7 @@ def tests_targets(self) -> set[str]: """ return self.tests_targets_for_test_job(self.job_config) - def get_test_check(self, chroot: str = None) -> str: + def get_test_check(self, chroot: Optional[str] = None) -> str: return self.get_test_check_cls( chroot, self.project_event_identifier_for_status, @@ -1422,9 +1422,9 @@ def report_status_to_tests_for_chroot( state, url: str = "", chroot: str = "", - markdown_content: str = None, + markdown_content: Optional[str] = None, links_to_external_services: Optional[dict[str, str]] = None, - update_feedback_time: Callable = None, + update_feedback_time: Optional[Callable] = None, ) -> None: if chroot in self.build_targets_for_tests: test_targets = self.build_target2test_targets_for_test_job( @@ -1448,9 +1448,9 @@ def report_status_to_tests_for_test_target( state, url: str = "", target: str = "", - markdown_content: str = None, + markdown_content: Optional[str] = None, links_to_external_services: Optional[dict[str, str]] = None, - update_feedback_time: Callable = None, + update_feedback_time: Optional[Callable] = None, ) -> None: if target in self.tests_targets: self._report( @@ -1468,9 +1468,9 @@ def report_status_to_tests( description, state, url: str = "", - markdown_content: str = None, + markdown_content: Optional[str] = None, links_to_external_services: Optional[dict[str, str]] = None, - update_feedback_time: Callable = None, + update_feedback_time: Optional[Callable] = None, ) -> None: self._report( description=description, @@ -1487,9 +1487,9 @@ def report_status_to_configured_job( description: str, state: BaseCommitStatus, url: str = "", - markdown_content: str = None, + markdown_content: Optional[str] = None, links_to_external_services: Optional[dict[str, str]] = None, - update_feedback_time: Callable = None, + update_feedback_time: Optional[Callable] = None, ): if self.job_config.manual_trigger and self.build_required(): logger.debug("Skipping the reporting.") diff --git a/packit_service/worker/mixin.py b/packit_service/worker/mixin.py index 2c0f602a3..e1c219089 100644 --- a/packit_service/worker/mixin.py +++ b/packit_service/worker/mixin.py @@ -339,7 +339,7 @@ def report( description: str, url: str = "", check_names: Union[str, list, None] = None, - markdown_content: str = None, + markdown_content: Optional[str] = None, ) -> None: ... @@ -366,6 +366,6 @@ def report( description: str, url: str = "", check_names: Union[str, list, None] = None, - markdown_content: str = None, + markdown_content: Optional[str] = None, ) -> None: self.job_helper._report(state, description, url, check_names, markdown_content) diff --git a/packit_service/worker/parser.py b/packit_service/worker/parser.py index 7cfbcfaf6..6ab1e81cf 100644 --- a/packit_service/worker/parser.py +++ b/packit_service/worker/parser.py @@ -7,7 +7,7 @@ import logging from datetime import datetime, timezone from os import getenv -from typing import Any, Optional, Union +from typing import Any, Callable, ClassVar, Optional, Union from ogr.parsing import parse_git_repo from packit.config import JobConfigTriggerType @@ -1736,7 +1736,7 @@ def parse_openscanhub_task_started_event( return event # The .__func__ are needed for Python < 3.10 - MAPPING = { + MAPPING: ClassVar[dict[str, dict[str, Callable]]] = { "github": { "check_run": parse_check_rerun_event.__func__, # type: ignore "pull_request": parse_pr_event.__func__, # type: ignore diff --git a/packit_service/worker/reporting/news.py b/packit_service/worker/reporting/news.py index 251f11ff4..e8582682f 100644 --- a/packit_service/worker/reporting/news.py +++ b/packit_service/worker/reporting/news.py @@ -2,10 +2,11 @@ # SPDX-License-Identifier: MIT from random import choice +from typing import ClassVar class News: - __FOOTERS = [ + __FOOTERS: ClassVar[list[str]] = [ "Do you maintain a Fedora package and don't have access to the upstream repository? " "Packit can help. " "Take a look [here](https://packit.dev/posts/pull-from-upstream/) to know more.", diff --git a/packit_service/worker/reporting/reporters/base.py b/packit_service/worker/reporting/reporters/base.py index c633c8d0c..00feb8471 100644 --- a/packit_service/worker/reporting/reporters/base.py +++ b/packit_service/worker/reporting/reporters/base.py @@ -101,7 +101,7 @@ def set_status( check_name: str, url: str = "", links_to_external_services: Optional[dict[str, str]] = None, - markdown_content: str = None, + markdown_content: Optional[str] = None, ): raise NotImplementedError() @@ -112,8 +112,8 @@ def report( url: str = "", links_to_external_services: Optional[dict[str, str]] = None, check_names: Union[str, list, None] = None, - markdown_content: str = None, - update_feedback_time: Callable = None, + markdown_content: Optional[str] = None, + update_feedback_time: Optional[Callable] = None, ) -> None: """ Set commit check status. diff --git a/packit_service/worker/reporting/reporters/github.py b/packit_service/worker/reporting/reporters/github.py index b2ebbb8ba..debf1dbfd 100644 --- a/packit_service/worker/reporting/reporters/github.py +++ b/packit_service/worker/reporting/reporters/github.py @@ -38,7 +38,7 @@ def set_status( check_name: str, url: str = "", links_to_external_services: Optional[dict[str, str]] = None, - markdown_content: str = None, + markdown_content: Optional[str] = None, ): state_to_set = self.get_commit_status(state) logger.debug( @@ -102,7 +102,7 @@ def set_status( check_name: str, url: str = "", links_to_external_services: Optional[dict[str, str]] = None, - markdown_content: str = None, + markdown_content: Optional[str] = None, ): markdown_content = markdown_content or "" state_to_set = self.get_check_run(state) @@ -141,6 +141,6 @@ def set_status( ) except GithubAPIException as e: logger.debug( - f"Failed to set status check, setting status as a fallback: {str(e)}", + f"Failed to set status check, setting status as a fallback: {e!s}", ) super().set_status(state, description, check_name, url) diff --git a/packit_service/worker/reporting/reporters/gitlab.py b/packit_service/worker/reporting/reporters/gitlab.py index 42810d47d..622117bd4 100644 --- a/packit_service/worker/reporting/reporters/gitlab.py +++ b/packit_service/worker/reporting/reporters/gitlab.py @@ -30,7 +30,7 @@ def set_status( check_name: str, url: str = "", links_to_external_services: Optional[dict[str, str]] = None, - markdown_content: str = None, + markdown_content: Optional[str] = None, ): state_to_set = self.get_commit_status(state) logger.debug( diff --git a/packit_service/worker/reporting/reporters/pagure.py b/packit_service/worker/reporting/reporters/pagure.py index 1927e9c09..b6f18eefd 100644 --- a/packit_service/worker/reporting/reporters/pagure.py +++ b/packit_service/worker/reporting/reporters/pagure.py @@ -30,7 +30,7 @@ def set_status( check_name: str, url: str = "", links_to_external_services: Optional[dict[str, str]] = None, - markdown_content: str = None, + markdown_content: Optional[str] = None, ): state_to_set = self.get_commit_status(state) logger.debug( diff --git a/packit_service/worker/result.py b/packit_service/worker/result.py index ae9906938..0ffc86e5e 100644 --- a/packit_service/worker/result.py +++ b/packit_service/worker/result.py @@ -1,7 +1,7 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT -from typing import Any +from typing import Any, Optional from packit.config import JobConfig @@ -15,7 +15,7 @@ class TaskResults(dict): Inherit from dict to be JSON serializable. """ - def __init__(self, success: bool, details: dict[str, Any] = None): + def __init__(self, success: bool, details: Optional[dict[str, Any]] = None): """ Args: success: Represents the resulting state of the job handler. diff --git a/packit_service/worker/tasks.py b/packit_service/worker/tasks.py index df75bafca..897f9a0ce 100644 --- a/packit_service/worker/tasks.py +++ b/packit_service/worker/tasks.py @@ -5,7 +5,7 @@ import socket from datetime import timedelta from os import getenv -from typing import Optional +from typing import ClassVar, Optional from celery import Task from celery._state import get_current_task @@ -158,7 +158,7 @@ def format(self, record): class TaskWithRetry(Task): autoretry_for = (Exception,) max_retries = int(getenv("CELERY_RETRY_LIMIT", DEFAULT_RETRY_LIMIT)) - retry_kwargs = {"max_retries": max_retries} + retry_kwargs: ClassVar[dict] = {"max_retries": max_retries} retry_backoff = int(getenv("CELERY_RETRY_BACKOFF", DEFAULT_RETRY_BACKOFF)) # https://docs.celeryq.dev/en/stable/userguide/tasks.html#Task.acks_late # retry if worker gets obliterated during execution @@ -170,7 +170,10 @@ class BodhiTaskWithRetry(TaskWithRetry): max_retries = 5 # also disable jitter for the same reason retry_jitter = False - retry_kwargs = {"max_retries": max_retries, "retry_jitter": retry_jitter} + retry_kwargs: ClassVar[dict] = { + "max_retries": max_retries, + "retry_jitter": retry_jitter, + } @celery_app.task( diff --git a/ruff.toml b/ruff.toml index e5e7269d6..eee593746 100644 --- a/ruff.toml +++ b/ruff.toml @@ -9,7 +9,7 @@ select = [ "PIE", # flake8-pie # "PT", # flake8-pytest-style, would be nice to enable "RET", # flake8-return - # "RUF", # Ruff-specific rules + "RUF", # Ruff-specific rules "SIM", # flake8-simplify "UP", # pyupgrade "W", # pycodestyle Warning @@ -17,6 +17,7 @@ select = [ ignore = [ "B017", # assert-raises-exception "B022", # useless-contextlib-suppress + "RUF001", # String contains ambiguous character "RUF003", # Comment contains ambiguous character "E701", # Multiple statements on one line (colon) ] diff --git a/tests/unit/test_build_helper.py b/tests/unit/test_build_helper.py index 0dd0aa7a3..d8dbdcd82 100644 --- a/tests/unit/test_build_helper.py +++ b/tests/unit/test_build_helper.py @@ -37,9 +37,9 @@ STABLE_VERSIONS = ALIASES["fedora-stable"] STABLE_CHROOTS = {f"{version}-x86_64" for version in STABLE_VERSIONS} -ONE_CHROOT_SET = {list(STABLE_CHROOTS)[0]} +ONE_CHROOT_SET = {next(iter(STABLE_CHROOTS))} STABLE_KOJI_TARGETS = {f"f{version[-2:]}" for version in STABLE_VERSIONS} -ONE_KOJI_TARGET_SET = {list(STABLE_KOJI_TARGETS)[0]} +ONE_KOJI_TARGET_SET = {next(iter(STABLE_KOJI_TARGETS))} def _mock_targets(jobs, job, job_type): @@ -494,7 +494,7 @@ def _mock_targets(jobs, job, job_type): ), ], (JobConfigTriggerType.pull_request, ProjectEventModelType.pull_request), - set(STABLE_VERSIONS + ["fedora-rawhide"]), + {*STABLE_VERSIONS, "fedora-rawhide"}, id="build_with_mixed_build_tests", ), ], diff --git a/tests_openshift/conftest.py b/tests_openshift/conftest.py index fb3c8617b..e3a3359d4 100644 --- a/tests_openshift/conftest.py +++ b/tests_openshift/conftest.py @@ -13,6 +13,7 @@ ``` """ import datetime +from typing import ClassVar import pytest from ogr import GithubService, GitlabService, PagureService @@ -102,8 +103,11 @@ class SampleValues: status_waiting_for_srpm = BuildStatus.waiting_for_srpm target = "fedora-42-x86_64" different_target = "fedora-43-x86_64" - chroots = ["fedora-43-x86_64", "fedora-42-x86_64"] - status_per_chroot = {"fedora-43-x86_64": "success", "fedora-42-x86_64": "pending"} + chroots: ClassVar[list[str]] = ["fedora-43-x86_64", "fedora-42-x86_64"] + status_per_chroot: ClassVar[dict[str, str]] = { + "fedora-43-x86_64": "success", + "fedora-42-x86_64": "pending", + } copr_web_url = "https://copr.something.somewhere/123456" koji_web_url = "https://koji.something.somewhere/123456" srpm_logs = "some\nboring\nlogs" @@ -122,7 +126,7 @@ class SampleValues: # Issues issue_id = 2020 different_issue_id = 987 - built_packages = [ + built_packages: ClassVar[list[dict]] = [ { "arch": "noarch", "epoch": 0,