diff --git a/packit_service/worker/checker/bodhi.py b/packit_service/worker/checker/bodhi.py index 5dcb99670..256068aef 100644 --- a/packit_service/worker/checker/bodhi.py +++ b/packit_service/worker/checker/bodhi.py @@ -43,9 +43,9 @@ def pre_check(self) -> bool: """ if self.data.event_type in ( - PullRequestCommentPagureEvent.__name__, - KojiBuildEvent.__name__, - KojiBuildTagEvent.__name__, + PullRequestCommentPagureEvent.event_type(), + KojiBuildEvent.event_type(), + KojiBuildTagEvent.event_type(), ): for koji_build_data in self: if koji_build_data.state != KojiBuildState.complete: @@ -75,7 +75,7 @@ class IsKojiBuildOwnerMatchingConfiguration(Checker, GetKojiBuildEventMixin): def pre_check(self) -> bool: """Check if the build submitter matches the configuration""" - if self.data.event_type in (KojiBuildEvent.__name__,): + if self.data.event_type in (KojiBuildEvent.event_type(),): owner = self.koji_build_event.owner configured_builders = self.job_config.allowed_builders @@ -120,8 +120,8 @@ class HasIssueCommenterRetriggeringPermissions(ActorChecker, ConfigFromEventMixi def _pre_check(self) -> bool: has_write_access = self.project.has_write_access(user=self.actor) if self.data.event_type in ( - IssueCommentEvent.__name__, - IssueCommentGitlabEvent.__name__, + IssueCommentEvent.event_type(), + IssueCommentGitlabEvent.event_type(), ): logger.debug( f"Re-triggering Bodhi update through comment in " @@ -147,7 +147,7 @@ def _pre_check(self) -> bool: return False return True - if self.data.event_type in (PullRequestCommentPagureEvent.__name__,): + if self.data.event_type in (PullRequestCommentPagureEvent.event_type(),): logger.debug( f"Re-triggering Bodhi update via dist-git comment in " f"repo {self.project_url} and #PR {self.data.pr_id} " @@ -179,7 +179,7 @@ def _pre_check(self) -> bool: class IsAuthorAPackager(ActorChecker, PackitAPIWithDownstreamMixin): def _pre_check(self) -> bool: if self.data.event_type not in ( - PullRequestCommentPagureEvent.__name__, + PullRequestCommentPagureEvent.event_type(), ) or self.is_packager(user=self.actor): return True diff --git a/packit_service/worker/checker/copr.py b/packit_service/worker/checker/copr.py index f4a8a4cd9..43c205a7a 100644 --- a/packit_service/worker/checker/copr.py +++ b/packit_service/worker/checker/copr.py @@ -43,7 +43,7 @@ def pre_check( self, ) -> bool: if ( - self.data.event_type == MergeRequestGitlabEvent.__name__ + self.data.event_type == MergeRequestGitlabEvent.event_type() and self.data.event_dict["action"] == GitlabEventAction.closed.value ): # Not interested in closed merge requests diff --git a/packit_service/worker/checker/distgit.py b/packit_service/worker/checker/distgit.py index 66845f4b5..70d0713df 100644 --- a/packit_service/worker/checker/distgit.py +++ b/packit_service/worker/checker/distgit.py @@ -32,7 +32,7 @@ class LabelsOnDistgitPR(Checker, GetPagurePullRequestMixin): def pre_check(self) -> bool: - if self.data.event_type not in (PushPagureEvent.__name__,) or not ( + if self.data.event_type not in (PushPagureEvent.event_type(),) or not ( self.job_config.require.label.present or self.job_config.require.label.absent ): return True @@ -47,8 +47,8 @@ def pre_check(self) -> bool: class PermissionOnDistgit(Checker, GetPagurePullRequestMixin): def pre_check(self) -> bool: if self.data.event_type in ( - PushPagureEvent.__name__, - KojiBuildTagEvent.__name__, + PushPagureEvent.event_type(), + KojiBuildTagEvent.event_type(), ) and self.data.git_ref not in ( configured_branches := get_branches( *self.job_config.dist_git_branches, @@ -62,7 +62,7 @@ def pre_check(self) -> bool: ) return False - if self.data.event_type in (PushPagureEvent.__name__,): + if self.data.event_type in (PushPagureEvent.event_type(),): if self.pull_request: pr_author = self.get_pr_author() logger.debug(f"PR author: {pr_author}") @@ -94,7 +94,7 @@ def pre_check(self) -> bool: f"configuration: {self.job_config.allowed_committers}.", ) return False - elif self.data.event_type in (PullRequestCommentPagureEvent.__name__,): + elif self.data.event_type in (PullRequestCommentPagureEvent.event_type(),): comment = self.data.event_dict.get("comment", "") commands = get_packit_commands_from_comment( comment, @@ -136,8 +136,8 @@ class HasIssueCommenterRetriggeringPermissions(ActorChecker): def _pre_check(self) -> bool: if self.data.event_type in ( - IssueCommentEvent.__name__, - IssueCommentGitlabEvent.__name__, + IssueCommentEvent.event_type(), + IssueCommentGitlabEvent.event_type(), ): logger.debug( f"Re-triggering downstream koji-build through comment in " @@ -181,7 +181,7 @@ class TaggedBuildIsNotABuildOfSelf(Checker): """ def pre_check(self) -> bool: - if self.data.event_type in (KojiBuildTagEvent.__name__,) and ( + if self.data.event_type in (KojiBuildTagEvent.event_type(),) 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.") @@ -215,12 +215,12 @@ def pre_check(self) -> bool: valid = False if self.package_config.upstream_project_url and ( - self.data.event_type in (NewHotnessUpdateEvent.__name__,) and not self.data.tag_name + self.data.event_type in (NewHotnessUpdateEvent.event_type(),) and not self.data.tag_name ): msg_to_report = "We were not able to get the upstream tag name." valid = False - if self.data.event_type in (PullRequestCommentPagureEvent.__name__,): + if self.data.event_type in (PullRequestCommentPagureEvent.event_type(),): commenter = self.data.actor logger.debug( f"Triggering pull-from-upstream through comment by: {commenter}", diff --git a/packit_service/worker/checker/koji.py b/packit_service/worker/checker/koji.py index 0a106bb3c..cef79f562 100644 --- a/packit_service/worker/checker/koji.py +++ b/packit_service/worker/checker/koji.py @@ -35,15 +35,15 @@ def pre_check(self) -> bool: class PermissionOnKoji(Checker, GetKojiBuildJobHelperMixin): def pre_check(self) -> bool: if ( - self.data.event_type == MergeRequestGitlabEvent.__name__ + self.data.event_type == MergeRequestGitlabEvent.event_type() and self.data.event_dict["action"] == GitlabEventAction.closed.value ): # Not interested in closed merge requests return False if self.data.event_type in ( - PullRequestGithubEvent.__name__, - MergeRequestGitlabEvent.__name__, + PullRequestGithubEvent.event_type(), + MergeRequestGitlabEvent.event_type(), ): user_can_merge_pr = self.project.can_merge_pr(self.data.actor) if not (user_can_merge_pr or self.data.actor in self.service_config.admins): diff --git a/packit_service/worker/events/abstract/comment.py b/packit_service/worker/events/abstract/comment.py index 62dea9523..bcb5d6375 100644 --- a/packit_service/worker/events/abstract/comment.py +++ b/packit_service/worker/events/abstract/comment.py @@ -5,6 +5,7 @@ abstract-comment event classes. """ +import os import re from logging import getLogger from typing import Optional, Union @@ -80,6 +81,11 @@ def __init__( self._build_targets_override = build_targets_override self._tests_targets_override = tests_targets_override + @classmethod + def event_type(cls) -> str: + assert os.environ.get("PYTEST_VERSION"), "Should be initialized only during tests" + return "test.abstract.comment.PullRequest" + @property def commit_sha(self) -> str: # type:ignore # mypy does not like properties @@ -165,6 +171,11 @@ def __init__( self._comment_object = comment_object self._issue_object: Optional[OgrIssue] = None + @classmethod + def event_type(cls) -> str: + assert os.environ.get("PYTEST_VERSION"), "Should be initialized only during tests" + return "test.abstract.comment.Issue" + @property def tag_name(self): if not self._tag_name: @@ -227,6 +238,11 @@ def __init__( self._tag_name: Optional[str] = None self._branch: Optional[str] = None + @classmethod + def event_type(cls) -> str: + assert os.environ.get("PYTEST_VERSION"), "Should be initialized only during tests" + return "test.abstract.comment.Commit" + @property def identifier(self) -> Optional[str]: return self.tag_name or self.branch diff --git a/packit_service/worker/events/anitya/base.py b/packit_service/worker/events/anitya/base.py index 587638a83..904ed47d8 100644 --- a/packit_service/worker/events/anitya/base.py +++ b/packit_service/worker/events/anitya/base.py @@ -35,6 +35,10 @@ def __init__( self._version = version self.bug_id = bug_id + @classmethod + def event_type(cls) -> str: + return "anitya.NewHotness" + @property def version(self) -> str: return self._version @@ -61,6 +65,10 @@ def __init__( self._versions = versions + @classmethod + def event_type(cls) -> str: + return "anitya.VersionUpdate" + @property def version(self) -> Optional[str]: # we will decide the version just when syncing release diff --git a/packit_service/worker/events/copr.py b/packit_service/worker/events/copr.py index 8e0e6d84d..dc4db56ec 100644 --- a/packit_service/worker/events/copr.py +++ b/packit_service/worker/events/copr.py @@ -1,6 +1,7 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT +import os from logging import getLogger from typing import Optional, Union @@ -67,6 +68,11 @@ def __init__( self.pkg = pkg self.timestamp = timestamp + @classmethod + def event_type(cls) -> str: + assert os.environ.get("PYTEST_VERSION"), "Should be initialized only during tests" + return "test.copr.Build" + def get_db_project_object(self) -> Optional[AbstractProjectObjectDbType]: return self.build.get_project_event_object() @@ -169,8 +175,12 @@ def get_copr_build_logs_url(self) -> str: class Start(CoprBuild): - pass + @classmethod + def event_type(cls) -> str: + return "copr.build.Start" class End(CoprBuild): - pass + @classmethod + def event_type(cls) -> str: + return "copr.build.End" diff --git a/packit_service/worker/events/event.py b/packit_service/worker/events/event.py index 14394230b..494b883f6 100644 --- a/packit_service/worker/events/event.py +++ b/packit_service/worker/events/event.py @@ -175,14 +175,14 @@ def _add_project_object_and_event(self): # TODO, do a better job # Probably, try to recreate original classes. if self.event_type in { - "PullRequestGithubEvent", - "PullRequestPagureEvent", - "MergeRequestGitlabEvent", - "PullRequestCommentGithubEvent", - "MergeRequestCommentGitlabEvent", - "PullRequestCommentPagureEvent", - "PullRequestFlagPagureEvent", - "CheckRerunPullRequestEvent", + "github.pr.Synchronize", + "pagure.pr.Synchronize", + "gitlab.mr.Synchronize", + "github.pr.Comment", + "pagure.pr.Comment", + "gitlab.mr.Comment", + "pagure.pr.Flag", + "github.check.PullRequest", }: ( self._db_project_object, @@ -195,10 +195,10 @@ def _add_project_object_and_event(self): commit_sha=self.commit_sha, ) elif self.event_type in { - "PushGitHubEvent", - "PushGitlabEvent", - "PushPagureEvent", - "CheckRerunCommitEvent", + "github.push.Push", + "gitlab.push.Push", + "pagure.push.Push", + "github.check.Push", }: ( self._db_project_object, @@ -212,9 +212,9 @@ def _add_project_object_and_event(self): ) elif self.event_type in { - "ReleaseEvent", - "ReleaseGitlabEvent", - "CheckRerunReleaseEvent", + "github.release.Release", + "gitlab.release.Release", + "github.check.Release", }: ( self._db_project_object, @@ -227,7 +227,7 @@ def _add_project_object_and_event(self): commit_hash=self.commit_sha, ) elif self.event_type in { - "NewHotnessUpdateEvent", + "anitya.NewHotness", }: if not self.project_url: ( @@ -259,8 +259,8 @@ def _add_project_object_and_event(self): commit_hash=self.commit_sha, ) elif self.event_type in { - "IssueCommentEvent", - "IssueCommentGitlabEvent", + "github.issue.Comment", + "gitlab.issue.Comment", }: ( self._db_project_object, @@ -272,7 +272,7 @@ def _add_project_object_and_event(self): project_url=self.project_url, ) elif self.event_type in { - "KojiBuildTagEvent", + "koji.base.Tag", }: ( self._db_project_object, @@ -285,7 +285,7 @@ def _add_project_object_and_event(self): project_url=self.project_url, ) elif self.event_type in { - "KojiBuildEvent", + "koji.base.Build", }: ( self._db_project_object, @@ -298,8 +298,8 @@ def _add_project_object_and_event(self): commit_sha=self.event_dict.get("commit_sha"), ) elif self.event_type in { - "CommitCommentGithubEvent", - "CommitCommentGitlabEvent", + "github.commit.Comment", + "gitlab.commit.Comment", }: if self.tag_name: ( @@ -392,6 +392,14 @@ def __init__(self, created_at: Optional[Union[int, float, str]] = None): self._db_project_object: Optional[AbstractProjectObjectDbType] = None self._db_project_event: Optional[ProjectEventModel] = None + @classmethod + @abstractmethod + def event_type(cls) -> str: + """ + ‹TODO› + """ + ... + @staticmethod def make_serializable(d: dict, skip: list) -> dict: """We need a JSON serializable dict (because of redis and celery tasks) @@ -434,7 +442,8 @@ 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()) - d["event_type"] = self.__class__.__name__ + # [TODO] check correctness, removed ‹__class__› + d["event_type"] = self.__class__.event_type() # we are trying to be lazy => don't touch database if it is not needed d["event_id"] = self._db_project_object.id if self._db_project_object else None diff --git a/packit_service/worker/events/github/check.py b/packit_service/worker/events/github/check.py index 122310532..8017cc2f0 100644 --- a/packit_service/worker/events/github/check.py +++ b/packit_service/worker/events/github/check.py @@ -1,6 +1,7 @@ # Copyright Contributors to the Packit project. # SPDX-License-Identifier: MIT +import os from typing import Optional from packit_service.models import ( @@ -40,6 +41,11 @@ def __init__( ) self.job_identifier = job_identifier + @classmethod + def event_type(cls) -> str: + assert os.environ.get("PYTEST_VERSION"), "Should be initialized only during tests" + return "test.github.check.Rerun" + @property def build_targets_override(self) -> Optional[set[tuple[str, str]]]: if self.check_name_job in {"rpm-build", "production-build", "koji-build"}: @@ -89,6 +95,10 @@ def __init__( self.identifier = git_ref self.git_ref = git_ref + @classmethod + def event_type(cls) -> str: + return "github.check.Commit" + class PullRequest(Rerun): _db_project_object: PullRequestModel @@ -121,6 +131,10 @@ def __init__( self.identifier = str(pr_id) self.git_ref = None + @classmethod + def event_type(cls) -> str: + return "github.check.PullRequest" + class Release(Rerun): _db_project_object: ProjectReleaseModel @@ -152,3 +166,7 @@ def __init__( self.tag_name = tag_name self.git_ref = tag_name self.identifier = tag_name + + @classmethod + def event_type(cls) -> str: + return "github.check.Release" diff --git a/packit_service/worker/events/github/commit.py b/packit_service/worker/events/github/commit.py index a1ba29d66..9fa9ae393 100644 --- a/packit_service/worker/events/github/commit.py +++ b/packit_service/worker/events/github/commit.py @@ -5,4 +5,6 @@ class Comment(Commit): - pass + @classmethod + def event_type(cls) -> str: + return "github.commit.Comment" diff --git a/packit_service/worker/events/github/installation.py b/packit_service/worker/events/github/installation.py index 76379c85b..70b4cb7a5 100644 --- a/packit_service/worker/events/github/installation.py +++ b/packit_service/worker/events/github/installation.py @@ -36,6 +36,10 @@ def __init__( self.sender_login = sender_login self.status = status + @classmethod + def event_type(cls) -> str: + return "github.installation.Installation" + @classmethod def from_event_dict(cls, event: dict): return Installation( diff --git a/packit_service/worker/events/github/issue.py b/packit_service/worker/events/github/issue.py index 3dbb7f837..4f4b983e4 100644 --- a/packit_service/worker/events/github/issue.py +++ b/packit_service/worker/events/github/issue.py @@ -44,6 +44,10 @@ def __init__( self.target_repo = target_repo self.identifier = str(issue_id) + @classmethod + def event_type(cls) -> str: + return "github.issue.Comment" + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["action"] = result["action"].value diff --git a/packit_service/worker/events/github/pr.py b/packit_service/worker/events/github/pr.py index 47a9f4c72..65c1953df 100644 --- a/packit_service/worker/events/github/pr.py +++ b/packit_service/worker/events/github/pr.py @@ -41,6 +41,10 @@ def __init__( self.identifier = str(pr_id) self.git_ref = None # pr_id will be used for checkout + @classmethod + def event_type(cls) -> str: + return "github.pr.Synchronize" + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["action"] = result["action"].value @@ -85,6 +89,10 @@ def __init__( self.identifier = str(pr_id) self.git_ref = None # pr_id will be used for checkout + @classmethod + def event_type(cls) -> str: + return "github.pr.Comment" + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["action"] = result["action"].value diff --git a/packit_service/worker/events/github/push.py b/packit_service/worker/events/github/push.py index a0fdd3525..3f1ac5f76 100644 --- a/packit_service/worker/events/github/push.py +++ b/packit_service/worker/events/github/push.py @@ -20,3 +20,7 @@ def __init__( self.git_ref = git_ref self.commit_sha = commit_sha self.identifier = git_ref + + @classmethod + def event_type(cls) -> str: + return "github.push.Push" diff --git a/packit_service/worker/events/github/release.py b/packit_service/worker/events/github/release.py index 29e7138e5..bf76c2a8b 100644 --- a/packit_service/worker/events/github/release.py +++ b/packit_service/worker/events/github/release.py @@ -17,6 +17,10 @@ def __init__(self, repo_namespace: str, repo_name: str, tag_name: str, project_u self.identifier = tag_name self._commit_sha: Optional[str] = None + @classmethod + def event_type(cls) -> str: + return "github.release.Release" + @property def commit_sha(self) -> Optional[str]: # type:ignore # mypy does not like properties diff --git a/packit_service/worker/events/gitlab/commit.py b/packit_service/worker/events/gitlab/commit.py index a1ba29d66..d02a161cd 100644 --- a/packit_service/worker/events/gitlab/commit.py +++ b/packit_service/worker/events/gitlab/commit.py @@ -5,4 +5,6 @@ class Comment(Commit): - pass + @classmethod + def event_type(cls) -> str: + return "gitlab.commit.Comment" diff --git a/packit_service/worker/events/gitlab/issue.py b/packit_service/worker/events/gitlab/issue.py index aac106946..e333748b9 100644 --- a/packit_service/worker/events/gitlab/issue.py +++ b/packit_service/worker/events/gitlab/issue.py @@ -40,6 +40,10 @@ def __init__( self.action = action self.actor = actor + @classmethod + def event_type(cls) -> str: + return "gitlab.issue.Comment" + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["action"] = result["action"].value diff --git a/packit_service/worker/events/gitlab/mr.py b/packit_service/worker/events/gitlab/mr.py index bfe11c8f4..d664df4dc 100644 --- a/packit_service/worker/events/gitlab/mr.py +++ b/packit_service/worker/events/gitlab/mr.py @@ -59,6 +59,10 @@ def __init__( self.description = description self.url = url + @classmethod + def event_type(cls) -> str: + return "gitlab.mr.Synchronize" + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["action"] = result["action"].value @@ -105,6 +109,10 @@ def __init__( self.actor = actor self.identifier = str(object_iid) + @classmethod + def event_type(cls) -> str: + return "gitlab.mr.Comment" + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["action"] = result["action"].value diff --git a/packit_service/worker/events/gitlab/pipeline.py b/packit_service/worker/events/gitlab/pipeline.py index 9616de7eb..3c8915260 100644 --- a/packit_service/worker/events/gitlab/pipeline.py +++ b/packit_service/worker/events/gitlab/pipeline.py @@ -28,3 +28,7 @@ def __init__( self.commit_sha = commit_sha self.source = source self.merge_request_url = merge_request_url + + @classmethod + def event_type(cls) -> str: + return "gitlab.pipeline.Pipeline" diff --git a/packit_service/worker/events/gitlab/push.py b/packit_service/worker/events/gitlab/push.py index d7ea05ee5..419abb056 100644 --- a/packit_service/worker/events/gitlab/push.py +++ b/packit_service/worker/events/gitlab/push.py @@ -6,6 +6,10 @@ ) from packit_service.worker.events.gitlab.abstract import GitlabEvent +# [TODO] Reconsider renaming in a following way: +# Push → Commit +# TagPush → Tag + class Push(AddBranchPushEventToDb, GitlabEvent): def __init__( @@ -23,6 +27,10 @@ def __init__( self.commit_sha = commit_sha self.identifier = git_ref + @classmethod + def event_type(cls) -> str: + return "gitlab.push.Push" + class TagPush(AddBranchPushEventToDb, GitlabEvent): def __init__( @@ -44,3 +52,7 @@ def __init__( self.commit_sha = commit_sha self.title = title self.message = message + + @classmethod + def event_type(cls) -> str: + return "gitlab.push.TagPush" diff --git a/packit_service/worker/events/gitlab/release.py b/packit_service/worker/events/gitlab/release.py index 63e17dd9f..b75b6992f 100644 --- a/packit_service/worker/events/gitlab/release.py +++ b/packit_service/worker/events/gitlab/release.py @@ -25,6 +25,10 @@ def __init__( self.tag_name = tag_name self._commit_sha = commit_sha + @classmethod + def event_type(cls) -> str: + return "gitlab.release.Release" + @property def commit_sha(self): return self._commit_sha diff --git a/packit_service/worker/events/koji/abstract.py b/packit_service/worker/events/koji/abstract.py index 9776343b5..61b2eae0e 100644 --- a/packit_service/worker/events/koji/abstract.py +++ b/packit_service/worker/events/koji/abstract.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: MIT import logging +import os from typing import Optional, Union from packit_service.models import ( @@ -34,6 +35,11 @@ def __init__( self._build_model: Optional[KojiBuildTargetModel] = None self._build_model_searched = False + @classmethod + def event_type(cls) -> str: + assert os.environ.get("PYTEST_VERSION"), "Should be initialized only during tests" + return "test.koji.Event" + @property def build_model(self) -> Optional[KojiBuildTargetModel]: if not self._build_model_searched and not self._build_model: diff --git a/packit_service/worker/events/koji/base.py b/packit_service/worker/events/koji/base.py index 24229df6c..a2982889e 100644 --- a/packit_service/worker/events/koji/base.py +++ b/packit_service/worker/events/koji/base.py @@ -69,6 +69,10 @@ def __init__( self.project_url = project_url self.owner = owner + @classmethod + def event_type(cls) -> str: + return "koji.base.Build" + def get_packages_config(self) -> Optional[PackageConfig]: logger.debug( f"Getting packages_config:\n" @@ -161,6 +165,10 @@ def __init__( self._git_ref: Optional[str] = None self._commit_sha: Optional[str] = None + @classmethod + def event_type(cls) -> str: + return "koji.base.Task" + @property def pr_id(self) -> Optional[int]: if not self._pr_id and isinstance(self.db_project_object, PullRequestModel): @@ -269,6 +277,10 @@ def __init__( self.release = release self.owner = owner + @classmethod + def event_type(cls) -> str: + return "koji.base.BuildTag" + @property def koji_helper(self) -> KojiHelper: if not self._koji_helper: diff --git a/packit_service/worker/events/openscanhub/task.py b/packit_service/worker/events/openscanhub/task.py index ad713b418..3a61ffcb4 100644 --- a/packit_service/worker/events/openscanhub/task.py +++ b/packit_service/worker/events/openscanhub/task.py @@ -6,7 +6,10 @@ from packit_service.worker.events.openscanhub.abstract import OpenScanHubEvent -class Started(OpenScanHubEvent): ... +class Started(OpenScanHubEvent): + @classmethod + def event_type(cls) -> str: + return "openscanhub.task.Started" class Finished(OpenScanHubEvent): @@ -30,3 +33,7 @@ def __init__( self.issues_added_url = issues_added_url self.issues_fixed_url = issues_fixed_url self.scan_results_url = scan_results_url + + @classmethod + def event_type(cls) -> str: + return "openscanhub.task.Finished" diff --git a/packit_service/worker/events/pagure/pr.py b/packit_service/worker/events/pagure/pr.py index 62d150b34..29a4301c7 100644 --- a/packit_service/worker/events/pagure/pr.py +++ b/packit_service/worker/events/pagure/pr.py @@ -61,6 +61,10 @@ def __init__( self._repo_url: Optional[RepoUrl] = None + @classmethod + def event_type(cls) -> str: + return "pagure.pr.Comment" + def get_dict(self, default_dict: Optional[dict] = None) -> dict: d = self.__dict__ d["repo_name"] = self.repo_name @@ -170,6 +174,10 @@ def __init__( self.project_url = project_url self.target_branch = target_branch + @classmethod + def event_type(cls) -> str: + return "pagure.pr.Synchronize" + def get_dict(self, default_dict: Optional[dict] = None) -> dict: result = super().get_dict() result["action"] = result["action"].value @@ -222,3 +230,7 @@ def __init__( self.pr_source_branch = pr_source_branch self.project_name = project_name self.project_namespace = project_namespace + + @classmethod + def event_type(cls) -> str: + return "pagure.pr.Flag" diff --git a/packit_service/worker/events/pagure/push.py b/packit_service/worker/events/pagure/push.py index 4689ff521..1fab4601f 100644 --- a/packit_service/worker/events/pagure/push.py +++ b/packit_service/worker/events/pagure/push.py @@ -25,3 +25,7 @@ def __init__( self.commit_sha = commit_sha self.identifier = git_ref self.committer = committer + + @classmethod + def event_type(cls) -> str: + return "pagure.push.Push" diff --git a/packit_service/worker/events/testing_farm.py b/packit_service/worker/events/testing_farm.py index 629890c33..a27dc5e0e 100644 --- a/packit_service/worker/events/testing_farm.py +++ b/packit_service/worker/events/testing_farm.py @@ -20,6 +20,10 @@ class Result(AbstractResult): __test__ = False + @classmethod + def event_type(cls) -> str: + return "testing_farm.Result" + def __init__( self, pipeline_id: str, diff --git a/packit_service/worker/events/vm_image.py b/packit_service/worker/events/vm_image.py index 43e1c94ac..fa1059aa8 100644 --- a/packit_service/worker/events/vm_image.py +++ b/packit_service/worker/events/vm_image.py @@ -36,6 +36,10 @@ def __init__( self.topic = "vm-image-build-state-change" + @classmethod + def event_type(cls) -> str: + return "vm_image.Result" + def get_db_project_object(self) -> Optional[AbstractProjectObjectDbType]: model = VMImageBuildTargetModel.get_by_build_id(self.build_id) for run in model.runs: diff --git a/packit_service/worker/handlers/distgit.py b/packit_service/worker/handlers/distgit.py index dab4bf0a7..c1df9042a 100644 --- a/packit_service/worker/handlers/distgit.py +++ b/packit_service/worker/handlers/distgit.py @@ -667,7 +667,7 @@ def __init__( celery_task=celery_task, sync_release_run_id=sync_release_run_id, ) - if self.data.event_type in (PullRequestCommentPagureEvent.__name__,): + if self.data.event_type in (PullRequestCommentPagureEvent.event_type(),): # use upstream project URL when retriggering from dist-git PR self._project_url = package_config.upstream_project_url # allow self.project to be None @@ -694,7 +694,7 @@ def get_resolved_bugs(self) -> list[str]: In case of comment, take the argument from comment. The format in the comment should be /packit pull-from-upstream --resolve-bug rhbz#123,rhbz#124 """ - if self.data.event_type in (NewHotnessUpdateEvent.__name__,): + if self.data.event_type in (NewHotnessUpdateEvent.event_type(),): bug_id = self.data.event_dict.get("bug_id") return [f"rhbz#{bug_id}"] @@ -1146,23 +1146,23 @@ def __init__( 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__,) + if self.data.event_type in (PullRequestCommentPagureEvent.event_type(),) else self.dg_branch ) return [branch] def get_trigger_type_description(self) -> str: trigger_type_description = "" - if self.data.event_type == PullRequestCommentPagureEvent.__name__: + if self.data.event_type == PullRequestCommentPagureEvent.event_type(): trigger_type_description += ( f"Fedora Koji build was re-triggered " f"by comment in dist-git PR id {self.data.pr_id}." ) - elif self.data.event_type == PushPagureEvent.__name__: + elif self.data.event_type == PushPagureEvent.event_type(): trigger_type_description += ( f"Fedora Koji build was triggered " f"by push with sha {self.data.commit_sha}." ) - elif self.data.event_type == KojiBuildTagEvent.__name__: + elif self.data.event_type == KojiBuildTagEvent.event_type(): trigger_type_description += ( f"Fedora Koji build was triggered " f"by tagging of build {self.data.event_dict['build_id']} " diff --git a/packit_service/worker/handlers/mixin.py b/packit_service/worker/handlers/mixin.py index f91154b99..ee7ac7812 100644 --- a/packit_service/worker/handlers/mixin.py +++ b/packit_service/worker/handlers/mixin.py @@ -504,9 +504,9 @@ def is_copr_build_comment_event(self) -> bool: ... class GetGithubCommentEventMixin(GetGithubCommentEvent, ConfigFromEventMixin): def is_comment_event(self) -> bool: return self.data.event_type in ( - PullRequestCommentGithubEvent.__name__, - MergeRequestCommentGitlabEvent.__name__, - PullRequestCommentPagureEvent.__name__, + PullRequestCommentGithubEvent.event_type(), + MergeRequestCommentGitlabEvent.event_type(), + PullRequestCommentPagureEvent.event_type(), ) def is_copr_build_comment_event(self) -> bool: diff --git a/packit_service/worker/handlers/vm_image.py b/packit_service/worker/handlers/vm_image.py index f38b7a495..90b43c619 100644 --- a/packit_service/worker/handlers/vm_image.py +++ b/packit_service/worker/handlers/vm_image.py @@ -24,7 +24,8 @@ IsCoprBuildForChrootOk, ) from packit_service.worker.events import ( - AbstractPRCommentEvent, + MergeRequestCommentGitlabEvent, + PullRequestCommentGithubEvent, VMImageBuildResultEvent, ) from packit_service.worker.handlers.abstract import ( @@ -48,7 +49,8 @@ @configured_as(job_type=JobType.vm_image_build) @run_for_comment(command="vm-image-build") -@reacts_to(AbstractPRCommentEvent) +@reacts_to(PullRequestCommentGithubEvent) +@reacts_to(MergeRequestCommentGitlabEvent) class VMImageBuildHandler( RetriableJobHandler, PackitAPIWithDownstreamMixin, 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 8b0635542..1ba02df58 100644 --- a/packit_service/worker/helpers/sync_release/pull_from_upstream.py +++ b/packit_service/worker/helpers/sync_release/pull_from_upstream.py @@ -48,11 +48,11 @@ def default_dg_branch(self) -> str: Get the default branch of the distgit project. """ if not self._default_dg_branch: - if self.metadata.event_type in (NewHotnessUpdateEvent.__name__,): + if self.metadata.event_type in (NewHotnessUpdateEvent.event_type(),): distgit_project_url = self.metadata.event_dict.get( "distgit_project_url", ) - elif self.metadata.event_type in (PullRequestCommentPagureEvent.__name__,): + elif self.metadata.event_type in (PullRequestCommentPagureEvent.event_type(),): distgit_project_url = self.metadata.event_dict.get("project_url") git_project = self.service_config.get_project(url=distgit_project_url) self._default_dg_branch = git_project.default_branch diff --git a/packit_service/worker/helpers/testing_farm.py b/packit_service/worker/helpers/testing_farm.py index cc76e4717..801b4e47e 100644 --- a/packit_service/worker/helpers/testing_farm.py +++ b/packit_service/worker/helpers/testing_farm.py @@ -311,9 +311,9 @@ def comment_arguments(self) -> Optional[CommentArguments]: def is_comment_event(self) -> bool: return self.metadata.event_type in ( - PullRequestCommentGithubEvent.__name__, - MergeRequestCommentGitlabEvent.__name__, - PullRequestCommentPagureEvent.__name__, + PullRequestCommentGithubEvent.event_type(), + MergeRequestCommentGitlabEvent.event_type(), + PullRequestCommentPagureEvent.event_type(), ) def is_copr_build_comment_event(self) -> bool: @@ -343,12 +343,12 @@ def build_required(self) -> bool: # for comment event requesting copr build self.metadata.event_type in ( - PushGitHubEvent.__name__, - PushGitlabEvent.__name__, - PullRequestGithubEvent.__name__, - MergeRequestGitlabEvent.__name__, - CommitCommentGithubEvent.__name__, - CommitCommentGitlabEvent.__name__, + PushGitHubEvent.event_type(), + PushGitlabEvent.event_type(), + PullRequestGithubEvent.event_type(), + MergeRequestGitlabEvent.event_type(), + CommitCommentGithubEvent.event_type(), + CommitCommentGitlabEvent.event_type(), ) or self.is_copr_build_comment_event() ) diff --git a/packit_service/worker/jobs.py b/packit_service/worker/jobs.py index edb4adbfe..780643800 100644 --- a/packit_service/worker/jobs.py +++ b/packit_service/worker/jobs.py @@ -879,7 +879,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.event_type()}", ) logger.debug(f"Matching handlers: {matching_handlers}") @@ -991,7 +991,7 @@ 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__.event_type()} took more than 15s to process.", ) # set the time when the accepted status was set so that we # can use it later for measurements diff --git a/tests/unit/test_bodhi_update_checks.py b/tests/unit/test_bodhi_update_checks.py index daeae1e89..b67c82665 100644 --- a/tests/unit/test_bodhi_update_checks.py +++ b/tests/unit/test_bodhi_update_checks.py @@ -22,12 +22,12 @@ "event_type, has_write_access, result", [ pytest.param( - "PullRequestCommentPagureEvent", + "pagure.pr.Comment", True, True, ), pytest.param( - "PullRequestCommentPagureEvent", + "pagure.pr.Comment", False, False, ), @@ -134,7 +134,7 @@ def test_check_is_author_a_packager(author_name: str, is_packager: bool, result: }, ) data = { - "event_type": "PullRequestCommentPagureEvent", + "event_type": "pagure.pr.Comment", "actor": author_name, "pr_id": 123, } diff --git a/tests/unit/test_checkers.py b/tests/unit/test_checkers.py index 06569c6f4..f18cc0e3c 100644 --- a/tests/unit/test_checkers.py +++ b/tests/unit/test_checkers.py @@ -80,7 +80,7 @@ def construct_dict(event, action=None, git_ref="random-non-configured-branch"): ( pytest.param( False, - construct_dict(event=MergeRequestGitlabEvent.__name__, action="closed"), + construct_dict(event=MergeRequestGitlabEvent.event_type(), action="closed"), True, True, JobConfigTriggerType.pull_request, @@ -88,7 +88,7 @@ def construct_dict(event, action=None, git_ref="random-non-configured-branch"): ), pytest.param( False, - construct_dict(event=PullRequestGithubEvent.__name__), + construct_dict(event=PullRequestGithubEvent.event_type()), True, False, JobConfigTriggerType.pull_request, @@ -96,7 +96,7 @@ def construct_dict(event, action=None, git_ref="random-non-configured-branch"): ), pytest.param( False, - construct_dict(event=MergeRequestGitlabEvent.__name__), + construct_dict(event=MergeRequestGitlabEvent.event_type()), True, False, JobConfigTriggerType.pull_request, @@ -104,7 +104,7 @@ def construct_dict(event, action=None, git_ref="random-non-configured-branch"): ), pytest.param( False, - construct_dict(event=MergeRequestGitlabEvent.__name__), + construct_dict(event=MergeRequestGitlabEvent.event_type()), False, True, JobConfigTriggerType.pull_request, @@ -112,7 +112,7 @@ def construct_dict(event, action=None, git_ref="random-non-configured-branch"): ), pytest.param( True, - construct_dict(event=PullRequestGithubEvent.__name__), + construct_dict(event=PullRequestGithubEvent.event_type()), True, True, JobConfigTriggerType.pull_request, @@ -120,7 +120,7 @@ def construct_dict(event, action=None, git_ref="random-non-configured-branch"): ), pytest.param( True, - construct_dict(event=MergeRequestGitlabEvent.__name__), + construct_dict(event=MergeRequestGitlabEvent.event_type()), True, True, JobConfigTriggerType.pull_request, @@ -178,25 +178,25 @@ def test_koji_permissions(success, event, is_scratch, can_merge_pr, trigger): ( pytest.param( False, - construct_dict(event=PushGitHubEvent.__name__), + construct_dict(event=PushGitHubEvent.event_type()), JobConfigTriggerType.commit, id="GitHub push to non-configured branch is ignored", ), pytest.param( False, - construct_dict(event=PushGitlabEvent.__name__), + construct_dict(event=PushGitlabEvent.event_type()), JobConfigTriggerType.commit, id="GitLab push to non-configured branch is ignored", ), pytest.param( False, - construct_dict(event=PushPagureEvent.__name__), + construct_dict(event=PushPagureEvent.event_type()), JobConfigTriggerType.commit, id="Pagure push to non-configured branch is ignored", ), pytest.param( True, - construct_dict(event=PushPagureEvent.__name__, git_ref="release"), + construct_dict(event=PushPagureEvent.event_type(), git_ref="release"), JobConfigTriggerType.commit, id="Pagure push to configured branch is not ignored", ), @@ -242,28 +242,28 @@ def test_branch_push_event_checker(success, event, trigger, checker_kls): pytest.param( "the-branch", True, - construct_dict(event=PullRequestGithubEvent.__name__), + construct_dict(event=PullRequestGithubEvent.event_type()), JobConfigTriggerType.pull_request, id="GitHub PR target branch matches", ), pytest.param( "the-other-branch", False, - construct_dict(event=PullRequestGithubEvent.__name__), + construct_dict(event=PullRequestGithubEvent.event_type()), JobConfigTriggerType.pull_request, id="GitHub PR target branch does not match", ), pytest.param( "the-branch", True, - construct_dict(event=MergeRequestGitlabEvent.__name__), + construct_dict(event=MergeRequestGitlabEvent.event_type()), JobConfigTriggerType.pull_request, id="GitLab PR target branch matches", ), pytest.param( "the-other-branch", False, - construct_dict(event=MergeRequestGitlabEvent.__name__), + construct_dict(event=MergeRequestGitlabEvent.event_type()), JobConfigTriggerType.pull_request, id="GitLab PR target branch does not match", ), @@ -356,7 +356,7 @@ def test_vm_image_is_copr_build_ok_for_chroot( checker = IsCoprBuildForChrootOk( package_config, job_config, - {"event_type": PullRequestCommentGithubEvent.__name__, "commit_sha": "1"}, + {"event_type": PullRequestCommentGithubEvent.event_type(), "commit_sha": "1"}, ) checker.data._db_project_object = flexmock(id=1) checker.data._db_project_event = ( @@ -435,7 +435,7 @@ def test_vm_image_has_author_write_access( package_config, job_config, { - "event_type": PullRequestCommentGithubEvent.__name__, + "event_type": PullRequestCommentGithubEvent.event_type(), "actor": actor, "project_url": project_url, }, @@ -472,7 +472,7 @@ def test_koji_branch_merge_queue(): ) event = construct_dict( - event=PushGitHubEvent.__name__, + event=PushGitHubEvent.event_type(), git_ref="gh-readonly-queue/main/pr-767-0203dd99c3d003cbfd912cec946cc5b46f695b10", ) @@ -543,7 +543,7 @@ def test_tf_comment_identifier(comment, result): ) event = { - "event_type": PullRequestCommentGithubEvent.__name__, + "event_type": PullRequestCommentGithubEvent.event_type(), "comment": comment, } @@ -635,7 +635,7 @@ def test_tf_comment_default_identifier( ) event = { - "event_type": PullRequestCommentGithubEvent.__name__, + "event_type": PullRequestCommentGithubEvent.event_type(), "comment": comment, } @@ -699,7 +699,7 @@ def test_tf_comment_labels(comment, result): ) event = { - "event_type": PullRequestCommentGithubEvent.__name__, + "event_type": PullRequestCommentGithubEvent.event_type(), "comment": comment, } @@ -787,7 +787,7 @@ def test_tf_comment_default_labels(comment, default_labels, job_labels, result): ) event = { - "event_type": PullRequestCommentGithubEvent.__name__, + "event_type": PullRequestCommentGithubEvent.event_type(), "comment": comment, } @@ -849,7 +849,7 @@ def test_tf_comment_labels_none_in_config(comment, result): ) event = { - "event_type": PullRequestCommentGithubEvent.__name__, + "event_type": PullRequestCommentGithubEvent.event_type(), "comment": comment, } diff --git a/tests/unit/test_copr_build.py b/tests/unit/test_copr_build.py index 326f58b48..6db380fbe 100644 --- a/tests/unit/test_copr_build.py +++ b/tests/unit/test_copr_build.py @@ -1025,7 +1025,7 @@ def test_check_if_actor_can_run_job_and_report(jobs, should_pass): package_config, jobs[0], { - "event_type": "PullRequestGithubEvent", + "event_type": "github.pr.Synchronize", "actor": "actor", "project_url": "url", "commit_sha": "abcdef", diff --git a/tests/unit/test_distgit.py b/tests/unit/test_distgit.py index d05bc03d0..b467a6899 100644 --- a/tests/unit/test_distgit.py +++ b/tests/unit/test_distgit.py @@ -69,7 +69,7 @@ def test_create_one_issue_for_pr(): ) -PAGURE_PULL_REQUEST_COMMENT_PROCESSED = '{"created_at": 1658228337, "project_url": "https://src.fedoraproject.org/rpms/python-teamcity-messages", "_pr_id": 36, "fail_when_config_file_missing": true, "actor": null, "_package_config_searched": true, "git_ref": null, "identifier": "36", "comment": "/packit koji-build", "comment_id": 110401, "_commit_sha": "beaf90bcecc51968a46663f8d6f092bfdc92e682", "action": "created", "base_repo_namespace": "rpms", "base_repo_name": "python-teamcity-messages", "base_repo_owner": "mmassari", "base_ref": null, "target_repo": "python-teamcity-messages", "user_login": "mmassari", "event_type": "PullRequestCommentPagureEvent", "event_id": null, "task_accepted_time": null, "commit_sha": "beaf90bcecc51968a46663f8d6f092bfdc92e682"}' # noqa +PAGURE_PULL_REQUEST_COMMENT_PROCESSED = '{"created_at": 1658228337, "project_url": "https://src.fedoraproject.org/rpms/python-teamcity-messages", "_pr_id": 36, "fail_when_config_file_missing": true, "actor": null, "_package_config_searched": true, "git_ref": null, "identifier": "36", "comment": "/packit koji-build", "comment_id": 110401, "_commit_sha": "beaf90bcecc51968a46663f8d6f092bfdc92e682", "action": "created", "base_repo_namespace": "rpms", "base_repo_name": "python-teamcity-messages", "base_repo_owner": "mmassari", "base_ref": null, "target_repo": "python-teamcity-messages", "user_login": "mmassari", "event_type": "pagure.pr.Comment", "event_id": null, "task_accepted_time": null, "commit_sha": "beaf90bcecc51968a46663f8d6f092bfdc92e682"}' # noqa @pytest.mark.parametrize(