summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Westphahl <simon.westphahl@bmw.de>2020-10-30 09:52:21 +0100
committerSimon Westphahl <simon.westphahl@bmw.de>2021-03-18 09:23:44 +0100
commit55ac08d3d6ebe9015798e5cbc5a9b34065052bcb (patch)
tree2e603298146ff11354ff015fa657dea06b41d233
parent89328b9251b29ef48adcb00bef12279f31f75de5 (diff)
downloadzuul-55ac08d3d6ebe9015798e5cbc5a9b34065052bcb.tar.gz
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
-rw-r--r--zuul/driver/gerrit/gerritmodel.py16
-rw-r--r--zuul/driver/github/githubmodel.py23
-rw-r--r--zuul/driver/gitlab/gitlabmodel.py20
-rw-r--r--zuul/driver/pagure/paguremodel.py20
-rw-r--r--zuul/driver/timer/timermodel.py9
-rw-r--r--zuul/driver/zuul/zuulmodel.py9
-rw-r--r--zuul/model.py60
7 files changed, 154 insertions, 3 deletions
diff --git a/zuul/driver/gerrit/gerritmodel.py b/zuul/driver/gerrit/gerritmodel.py
index c80c04563..095761222 100644
--- a/zuul/driver/gerrit/gerritmodel.py
+++ b/zuul/driver/gerrit/gerritmodel.py
@@ -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)
diff --git a/zuul/driver/github/githubmodel.py b/zuul/driver/github/githubmodel.py
index 433141ec1..cc4ca747d 100644
--- a/zuul/driver/github/githubmodel.py
+++ b/zuul/driver/github/githubmodel.py
@@ -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']
diff --git a/zuul/driver/gitlab/gitlabmodel.py b/zuul/driver/gitlab/gitlabmodel.py
index fdf6de042..88f377488 100644
--- a/zuul/driver/gitlab/gitlabmodel.py
+++ b/zuul/driver/gitlab/gitlabmodel.py
@@ -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:
diff --git a/zuul/driver/pagure/paguremodel.py b/zuul/driver/pagure/paguremodel.py
index 93a0866da..b06daa0a5 100644
--- a/zuul/driver/pagure/paguremodel.py
+++ b/zuul/driver/pagure/paguremodel.py
@@ -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:
diff --git a/zuul/driver/timer/timermodel.py b/zuul/driver/timer/timermodel.py
index d6f14152e..d1806eed7 100644
--- a/zuul/driver/timer/timermodel.py
+++ b/zuul/driver/timer/timermodel.py
@@ -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"]
diff --git a/zuul/driver/zuul/zuulmodel.py b/zuul/driver/zuul/zuulmodel.py
index 036f6d2dd..6c67ab83c 100644
--- a/zuul/driver/zuul/zuulmodel.py
+++ b/zuul/driver/zuul/zuulmodel.py
@@ -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"]
diff --git a/zuul/model.py b/zuul/model.py
index 0771ff169..05730db68 100644
--- a/zuul/model.py
+++ b/zuul/model.py
@@ -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