Allow (de-)serialization of trigger events

Since trigger events will be stored in Zookeeper we need a way to
(de-)serialze them from/to dictionaries.

Change-Id: I1698e22b61947761ddeb10264b84ec157609495b
This commit is contained in:
Simon Westphahl
2020-10-30 09:52:21 +01:00
parent 89328b9251
commit 55ac08d3d6
7 changed files with 154 additions and 3 deletions

View File

@@ -16,7 +16,6 @@ import copy
import re
import time
import urllib.parse
import dateutil.parser
from zuul.model import EventFilter, RefFilter
@@ -165,6 +164,21 @@ class GerritTriggerEvent(TriggerEvent):
self.scheme = None
self.patchsetcomments = None
def toDict(self):
d = super().toDict()
d["approvals"] = self.approvals
d["uuid"] = self.uuid
d["scheme"] = self.scheme
d["patchsetcomments"] = self.patchsetcomments
return d
def updateFromDict(self, d):
super().updateFromDict(d)
self.approvals = d["approvals"]
self.uuid = d["uuid"]
self.scheme = d["scheme"]
self.patchsetcomments = d["patchsetcomments"]
def __repr__(self):
ret = '<GerritTriggerEvent %s %s' % (self.type,
self.canonical_project_name)

View File

@@ -78,6 +78,29 @@ class GithubTriggerEvent(TriggerEvent):
self.status = None
self.commits = []
def toDict(self):
d = super().toDict()
d["title"] = self.title
d["label"] = self.label
d["unlabel"] = self.unlabel
d["action"] = self.action
d["delivery"] = self.delivery
d["check_run"] = self.check_run
d["status"] = self.status
d["commits"] = self.commits
return d
def updateFromDict(self, d):
super().updateFromDict(d)
self.title = d["title"]
self.label = d["label"]
self.unlabel = d["unlabel"]
self.action = d["action"]
self.delivery = d["delivery"]
self.check_run = d["check_run"]
self.status = d["status"]
self.commits = d["commits"]
def isPatchsetCreated(self):
if self.type == 'pull_request':
return self.action in ['opened', 'changed']

View File

@@ -13,7 +13,6 @@
# under the License.
import re
from zuul.model import Change, TriggerEvent, EventFilter, RefFilter
EMPTY_GIT_REF = '0' * 40 # git sha of all zeros, used during creates/deletes
@@ -66,6 +65,25 @@ class GitlabTriggerEvent(TriggerEvent):
self.change_number = None
self.tag = None
def toDict(self):
d = super().toDict()
d["trigger_name"] = self.trigger_name
d["title"] = self.title
d["action"] = self.action
d["labels"] = self.labels
d["change_number"] = self.change_number
d["tag"] = self.tag
return d
def updateFromDict(self, d):
super().updateFromDict(d)
self.trigger_name = d["trigger_name"]
self.title = d["title"]
self.action = d["action"]
self.labels = d["labels"]
self.change_number = d["change_number"]
self.tag = d["tag"]
def _repr(self):
r = [super(GitlabTriggerEvent, self)._repr()]
if self.action:

View File

@@ -13,6 +13,7 @@
# under the License.
import re
from zuul.model import Change, TriggerEvent, EventFilter, RefFilter
EMPTY_GIT_REF = '0' * 40 # git sha of all zeros, used during creates/deletes
@@ -71,6 +72,25 @@ class PagureTriggerEvent(TriggerEvent):
self.tags = []
self.tag = None
def toDict(self):
d = super().toDict()
d["trigger_name"] = self.trigger_name
d["title"] = self.title
d["action"] = self.action
d["status"] = self.status
d["tags"] = list(self.tags)
d["tag"] = self.tag
return d
def updateFromDict(self, d):
super().updateFromDict(d)
self.trigger_name = d.get("trigger_name", "pagure")
self.title = d.get("title")
self.action = d.get("action")
self.status = d.get("status")
self.tags = d.get("tags", [])
self.tag = d.get("tag")
def _repr(self):
r = [super(PagureTriggerEvent, self)._repr()]
if self.action:

View File

@@ -60,3 +60,12 @@ class TimerTriggerEvent(TriggerEvent):
def __init__(self):
super(TimerTriggerEvent, self).__init__()
self.timespec = None
def toDict(self):
d = super().toDict()
d["timespec"] = self.timespec
return d
def updateFromDict(self, d):
super().updateFromDict(d)
self.timespec = d["timespec"]

View File

@@ -61,3 +61,12 @@ class ZuulTriggerEvent(TriggerEvent):
def __init__(self):
super(ZuulTriggerEvent, self).__init__()
self.pipeline_name = None
def toDict(self):
d = super().toDict()
d["pipeline_name"] = self.pipeline_name
return d
def updateFromDict(self, d):
super().updateFromDict(d)
self.pipeline_name = d["pipeline_name"]

View File

@@ -3804,7 +3804,7 @@ class NodesProvisionedEvent(ResultEvent):
self.request_id = request.id
class TriggerEvent(object):
class TriggerEvent(AbstractEvent):
"""Incoming event from an external system."""
def __init__(self):
# TODO(jeblair): further reduce this list
@@ -3841,6 +3841,64 @@ class TriggerEvent(object):
self.timestamp = None
self.arrived_at_scheduler_timestamp = None
def toDict(self):
return {
"data": self.data,
"type": self.type,
"branch_updated": self.branch_updated,
"branch_created": self.branch_created,
"branch_deleted": self.branch_deleted,
"branch_protected": self.branch_protected,
"ref": self.ref,
"tenant_name": self.tenant_name,
"project_hostname": self.project_hostname,
"project_name": self.project_name,
"trigger_name": self.trigger_name,
"account": self.account,
"change_number": self.change_number,
"change_url": self.change_url,
"patch_number": self.patch_number,
"branch": self.branch,
"comment": self.comment,
"state": self.state,
"oldrev": self.oldrev,
"newrev": self.newrev,
"forced_pipeline": self.forced_pipeline,
"zuul_event_id": self.zuul_event_id,
"timestamp": self.timestamp,
"arrived_at_scheduler_timestamp": (
self.arrived_at_scheduler_timestamp
),
}
def updateFromDict(self, d):
self.data = d["data"]
self.type = d["type"]
self.branch_updated = d["branch_updated"]
self.branch_created = d["branch_created"]
self.branch_deleted = d["branch_deleted"]
self.branch_protected = d["branch_protected"]
self.ref = d["ref"]
self.tenant_name = d["tenant_name"]
self.project_hostname = d["project_hostname"]
self.project_name = d["project_name"]
self.trigger_name = d["trigger_name"]
self.account = d["account"]
self.change_number = d["change_number"]
self.change_url = d["change_url"]
self.patch_number = d["patch_number"]
self.branch = d["branch"]
self.comment = d["comment"]
self.state = d["state"]
self.oldrev = d["oldrev"]
self.newrev = d["newrev"]
self.forced_pipeline = d["forced_pipeline"]
self.zuul_event_id = d["zuul_event_id"]
self.timestamp = d["timestamp"]
self.arrived_at_scheduler_timestamp = (
d["arrived_at_scheduler_timestamp"]
)
@property
def canonical_project_name(self):
return self.project_hostname + '/' + self.project_name