From 67ff750cceb0950bd5a2c50818bbb1d91bbeb4d7 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Dec 15 2017 13:10:36 +0000 Subject: Define the BaseHandler.allow_build criteria in the BaseEvent subclasses to keep all of them consistent and in the same place --- diff --git a/freshmaker/events.py b/freshmaker/events.py index bc9a66d..2239a4c 100644 --- a/freshmaker/events.py +++ b/freshmaker/events.py @@ -132,6 +132,15 @@ class BaseEvent(object): """ return self.msg_id + @property + def allow_build_criteria(self): + """ + Returns dict containing the key-value pairs which are passed to + BaseHandler.allow_build() method to find out whether the handling + of event is enabled by config.handler_whitelist. + """ + return {"manual": self.manual} + class MBSModuleStateChangeEvent(BaseEvent): """ A class that inherits from BaseEvent to provide an event @@ -262,6 +271,12 @@ class ErrataAdvisoryStateChangedEvent(BaseEvent): self.errata_id = errata_id self.state = state + @property + def allow_build_criteria(self): + ret = BaseEvent.allow_build_criteria.fget(self) + ret["advisory_state"] = self.state + return ret + class ErrataAdvisoryRPMsSignedEvent(BaseEvent): """ @@ -278,6 +293,14 @@ class ErrataAdvisoryRPMsSignedEvent(BaseEvent): def search_key(self): return str(self.errata_id) + @property + def allow_build_criteria(self): + ret = BaseEvent.allow_build_criteria.fget(self) + ret["advisory_name"] = self.errata_name + ret["advisory_security_impact"] = self.security_impact + ret["advisory_state"] = self.errata_state + return ret + class BrewSignRPMEvent(BaseEvent): """ diff --git a/freshmaker/handlers/__init__.py b/freshmaker/handlers/__init__.py index 941d4d1..fa2581d 100644 --- a/freshmaker/handlers/__init__.py +++ b/freshmaker/handlers/__init__.py @@ -265,6 +265,21 @@ class BaseHandler(object): return False + def allow_build_by_event(self, artifact_type, event, **extra_criteria): + """ + Check whether the artifact is allowed to be built as a result of event + by checking HANDLER_BUILD_WHITELIST in config. + """ + criteria = event.allow_build_criteria + criteria.update(**extra_criteria) + + if "manual" in criteria and criteria["manual"]: + log.info("Skipping allow_build check for manually triggered " + "event %r", event) + return True + + return self.allow_build(artifact_type, **criteria) + class ContainerBuildHandler(BaseHandler): """Handler for building containers""" diff --git a/freshmaker/handlers/errata/errata_advisory_rpms_signed.py b/freshmaker/handlers/errata/errata_advisory_rpms_signed.py index 6140436..bc8c892 100644 --- a/freshmaker/handlers/errata/errata_advisory_rpms_signed.py +++ b/freshmaker/handlers/errata/errata_advisory_rpms_signed.py @@ -76,10 +76,7 @@ class ErrataAdvisoryRPMsSignedHandler(ContainerBuildHandler): self.set_context(db_event) # Check if we are allowed to build this advisory. - if not event.manual and not self.allow_build( - ArtifactType.IMAGE, - advisory_name=event.errata_name, - advisory_security_impact=event.security_impact): + if not self.allow_build_by_event(ArtifactType.IMAGE, event): msg = ("Errata advisory {0} is not allowed by internal policy " "to trigger rebuilds.".format(event.errata_id)) db_event.transition(EventState.SKIPPED, msg) @@ -525,8 +522,8 @@ class ErrataAdvisoryRPMsSignedHandler(ContainerBuildHandler): image_name = koji.parse_NVR(image["brew"]["build"])['name'] - if not self.event.manual and not self.allow_build( - ArtifactType.IMAGE, image_name=image_name): + if not self.allow_build_by_event( + ArtifactType.IMAGE, self.event, image_name=image_name): log.info("Skipping rebuild of image %s, not allowed by " "configuration", image_name) return True diff --git a/freshmaker/handlers/errata/errata_advisory_state_changed.py b/freshmaker/handlers/errata/errata_advisory_state_changed.py index 754ea36..cbeed5e 100644 --- a/freshmaker/handlers/errata/errata_advisory_state_changed.py +++ b/freshmaker/handlers/errata/errata_advisory_state_changed.py @@ -104,7 +104,7 @@ class ErrataAdvisoryStateChangedHandler(BaseHandler): extra_events = [] - if self.allow_build(ArtifactType.IMAGE, advisory_state=event.state): + if self.allow_build_by_event(ArtifactType.IMAGE, event): extra_events += self.rebuild_if_not_exists(event, errata_id) if state == "SHIPPED_LIVE":