ReviewBot: rework override check to operate on actions.
In multi-action workflows the override check should be performed by action so that different groups of users can override for different actions. Additionally, abstracting the request_commands() method provides a flexible base for additional commands to be added by ReviewBots.
This commit is contained in:
parent
7559153cbf
commit
701021070c
26
ReviewBot.py
26
ReviewBot.py
@ -182,10 +182,6 @@ class ReviewBot(object):
|
|||||||
with sentry_sdk.configure_scope() as scope:
|
with sentry_sdk.configure_scope() as scope:
|
||||||
scope.set_extra('request.id', self.request.reqid)
|
scope.set_extra('request.id', self.request.reqid)
|
||||||
|
|
||||||
override = self.request_override_check(req)
|
|
||||||
if override is not None:
|
|
||||||
good = override
|
|
||||||
else:
|
|
||||||
try:
|
try:
|
||||||
good = self.check_one_request(req)
|
good = self.check_one_request(req)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -228,15 +224,12 @@ class ReviewBot(object):
|
|||||||
|
|
||||||
return users
|
return users
|
||||||
|
|
||||||
def request_override_check(self, request, force=False):
|
def request_override_check(self, force=False):
|
||||||
"""Check for a comment command requesting review override."""
|
"""Check for a comment command requesting review override."""
|
||||||
if not force and not self.override_allow:
|
if not force and not self.override_allow:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
comments = self.comment_api.get_comments(request_id=request.reqid)
|
for args, who in self.request_commands('override'):
|
||||||
users = self.request_override_check_users(request.actions[0].tgt_project)
|
|
||||||
for args, who in self.comment_api.command_find(
|
|
||||||
comments, self.review_user, 'override', users):
|
|
||||||
message = 'overridden by {}'.format(who)
|
message = 'overridden by {}'.format(who)
|
||||||
override = args[1] if len(args) >= 2 else 'accept'
|
override = args[1] if len(args) >= 2 else 'accept'
|
||||||
if override == 'accept':
|
if override == 'accept':
|
||||||
@ -247,6 +240,17 @@ class ReviewBot(object):
|
|||||||
self.review_messages['declined'] = message
|
self.review_messages['declined'] = message
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def request_commands(self, command, who_allowed=None, request=None, action=None):
|
||||||
|
if not request:
|
||||||
|
request = self.request
|
||||||
|
if not action:
|
||||||
|
action = self.action
|
||||||
|
if not who_allowed:
|
||||||
|
who_allowed = self.request_override_check_users(action.tgt_project)
|
||||||
|
|
||||||
|
comments = self.comment_api.get_comments(request_id=request.reqid)
|
||||||
|
yield from self.comment_api.command_find(comments, self.review_user, command, who_allowed)
|
||||||
|
|
||||||
def _set_review(self, req, state):
|
def _set_review(self, req, state):
|
||||||
doit = self.can_accept_review(req.reqid)
|
doit = self.can_accept_review(req.reqid)
|
||||||
if doit is None:
|
if doit is None:
|
||||||
@ -407,6 +411,10 @@ class ReviewBot(object):
|
|||||||
with sentry_sdk.configure_scope() as scope:
|
with sentry_sdk.configure_scope() as scope:
|
||||||
scope.set_extra('action.key', key)
|
scope.set_extra('action.key', key)
|
||||||
|
|
||||||
|
override = self.request_override_check()
|
||||||
|
if override is not None:
|
||||||
|
ret = override
|
||||||
|
else:
|
||||||
func = getattr(self, self.action_method(a))
|
func = getattr(self, self.action_method(a))
|
||||||
ret = func(req, a)
|
ret = func(req, a)
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ class OriginManager(ReviewBot.ReviewBot):
|
|||||||
if result.wait:
|
if result.wait:
|
||||||
# Allow overriding a policy wait by accepting as workaround with the
|
# Allow overriding a policy wait by accepting as workaround with the
|
||||||
# hope that pending request will be accepted.
|
# hope that pending request will be accepted.
|
||||||
override = self.request_override_check(self.request, True)
|
override = self.request_override_check(True)
|
||||||
if override:
|
if override:
|
||||||
self.review_messages['accepted'] = origin_annotation_dump(
|
self.review_messages['accepted'] = origin_annotation_dump(
|
||||||
origin_info_new, origin_info_old, self.review_messages['accepted'], raw=True)
|
origin_info_new, origin_info_old, self.review_messages['accepted'], raw=True)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user