support event 'category' for GitLab (e.g. Note events but only for Issues)

This commit is contained in:
jesopo 2019-10-28 14:10:42 +00:00
parent 6ee76af907
commit 7766c889f4
4 changed files with 22 additions and 13 deletions

View file

@ -67,7 +67,7 @@ class Module(ModuleManager.BaseModule):
organisation_lower = (organisation or "").lower() organisation_lower = (organisation or "").lower()
branch = handler.branch(data, headers) branch = handler.branch(data, headers)
current_event, event_action = handler.event(data, headers) current_events = handler.event(data, headers)
unfiltered_targets = [] unfiltered_targets = []
if "channels" in params: if "channels" in params:
@ -101,13 +101,12 @@ class Module(ModuleManager.BaseModule):
not branch in hook["branches"]): not branch in hook["branches"]):
continue continue
events = [] hooked_events = []
for hooked_event in hook["events"]: for hooked_event in hook["events"]:
events.append(handler.event_categories(hooked_event)) hooked_events.append(handler.event_categories(hooked_event))
events = list(itertools.chain(*events)) hooked_events = set(itertools.chain(*hooked_events))
if (current_event in events or if bool(set(current_events)&set(hooked_events)):
(event_action and event_action in events)):
targets.append([server, channel]) targets.append([server, channel])
if not targets: if not targets:

View file

@ -72,7 +72,7 @@ class Gitea(object):
event_action = None event_action = None
if "action" in data: if "action" in data:
event_action = "%s/%s" % (event, data["action"]) event_action = "%s/%s" % (event, data["action"])
return event, event_action return [event]+([event_action] if event_action else [])
def event_categories(self, event): def event_categories(self, event):
return EVENT_CATEGORIES.get(event, [event]) return EVENT_CATEGORIES.get(event, [event])

View file

@ -114,7 +114,7 @@ class GitHub(object):
event_action = None event_action = None
if "action" in data: if "action" in data:
event_action = "%s/%s" % (event, data["action"]) event_action = "%s/%s" % (event, data["action"])
return event, event_action return [event]+([event_action] if event_action else [])
def event_categories(self, event): def event_categories(self, event):
return EVENT_CATEGORIES.get(event, [event]) return EVENT_CATEGORIES.get(event, [event])

View file

@ -71,13 +71,23 @@ class GitLab(object):
def event(self, data, headers): def event(self, data, headers):
event = headers["X-GitLab-Event"].rsplit(" ", 1)[0].lower() event = headers["X-GitLab-Event"].rsplit(" ", 1)[0].lower()
event = event.replace(" ", "_") event = event.replace(" ", "_")
event_action = None event_action = None
if ("object_attributes" in data and
"action" in data["object_attributes"]): category = None
event_action = "%s/%s" % ( category_action = None
event, data["object_attributes"]["action"])
return event, event_action if "object_attributes" in data:
if "action" in data["object_attributes"]:
event_action = "%s/%s" % (
event, data["object_attributes"]["action"])
if "noteable_type" in data["object_attributes"]:
category = data["object_attributes"]["noteable_type"].lower()
category = "%s+%s" % (event, category)
category_action = "%s/%s" % (category, action)
return list(filter([event, event_action, category, category_action]))
def event_categories(self, event): def event_categories(self, event):
return EVENT_CATEGORIES.get(event, [event]) return EVENT_CATEGORIES.get(event, [event])