Merge pull request #469 from lnussel/review
Implement configurable review mode
This commit is contained in:
commit
8e839974e9
44
ReviewBot.py
44
ReviewBot.py
@ -48,6 +48,7 @@ class ReviewBot(object):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
DEFAULT_REVIEW_MESSAGES = { 'accepted' : 'ok', 'declined': 'review failed' }
|
DEFAULT_REVIEW_MESSAGES = { 'accepted' : 'ok', 'declined': 'review failed' }
|
||||||
|
REVIEW_CHOICES = ('normal', 'no', 'accept', 'fallback-onfail', 'fallback-always')
|
||||||
|
|
||||||
def __init__(self, apiurl = None, dryrun = False, logger = None, user = None, group = None):
|
def __init__(self, apiurl = None, dryrun = False, logger = None, user = None, group = None):
|
||||||
self.apiurl = apiurl
|
self.apiurl = apiurl
|
||||||
@ -57,6 +58,19 @@ class ReviewBot(object):
|
|||||||
self.review_group = group
|
self.review_group = group
|
||||||
self.requests = []
|
self.requests = []
|
||||||
self.review_messages = ReviewBot.DEFAULT_REVIEW_MESSAGES
|
self.review_messages = ReviewBot.DEFAULT_REVIEW_MESSAGES
|
||||||
|
self._review_mode = 'normal'
|
||||||
|
self.fallback_user = None
|
||||||
|
self.fallback_group = None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def review_mode(self):
|
||||||
|
return self._review_mode
|
||||||
|
|
||||||
|
@review_mode.setter
|
||||||
|
def review_mode(self, value):
|
||||||
|
if value not in self.REVIEW_CHOICES:
|
||||||
|
raise Exception("invalid review option: %s"%value)
|
||||||
|
self._review_mode = value
|
||||||
|
|
||||||
def set_request_ids(self, ids):
|
def set_request_ids(self, ids):
|
||||||
for rqid in ids:
|
for rqid in ids:
|
||||||
@ -68,18 +82,32 @@ class ReviewBot(object):
|
|||||||
self.requests.append(req)
|
self.requests.append(req)
|
||||||
|
|
||||||
def check_requests(self):
|
def check_requests(self):
|
||||||
|
|
||||||
|
by_user = self.fallback_user
|
||||||
|
by_group = self.fallback_group
|
||||||
|
|
||||||
for req in self.requests:
|
for req in self.requests:
|
||||||
self.logger.debug("checking %s"%req.reqid)
|
self.logger.debug("checking %s"%req.reqid)
|
||||||
good = self.check_one_request(req)
|
good = self.check_one_request(req)
|
||||||
|
|
||||||
|
if self.review_mode == 'no':
|
||||||
|
good = None
|
||||||
|
elif self.review_mode == 'accept':
|
||||||
|
good = True
|
||||||
|
|
||||||
if good is None:
|
if good is None:
|
||||||
self.logger.info("%s ignored"%req.reqid)
|
self.logger.info("%s ignored"%req.reqid)
|
||||||
elif good:
|
elif good:
|
||||||
self.logger.info("%s is good"%req.reqid)
|
self.logger.info("%s is good"%req.reqid)
|
||||||
self._set_review(req, 'accepted')
|
self._set_review(req, 'accepted')
|
||||||
else:
|
else:
|
||||||
self.logger.info("%s is not acceptable"%req.reqid)
|
if self.review_mode == 'fallback-onfail':
|
||||||
self._set_review(req, 'declined')
|
self.logger.info("%s needs fallback reviewer"%req.reqid)
|
||||||
|
self.add_review(req, by_group=by_group, by_user=by_user)
|
||||||
|
self._set_review(req, 'accepted')
|
||||||
|
else:
|
||||||
|
self.logger.info("%s is not acceptable"%req.reqid)
|
||||||
|
self._set_review(req, 'declined')
|
||||||
|
|
||||||
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)
|
||||||
@ -314,6 +342,9 @@ class CommandLineInterface(cmdln.Cmdln):
|
|||||||
parser.add_option("--debug", action="store_true", help="debug output")
|
parser.add_option("--debug", action="store_true", help="debug output")
|
||||||
parser.add_option("--osc-debug", action="store_true", help="osc debug output")
|
parser.add_option("--osc-debug", action="store_true", help="osc debug output")
|
||||||
parser.add_option("--verbose", action="store_true", help="verbose")
|
parser.add_option("--verbose", action="store_true", help="verbose")
|
||||||
|
parser.add_option("--review-mode", dest='review_mode', choices=ReviewBot.REVIEW_CHOICES, help="review behavior")
|
||||||
|
parser.add_option("--fallback-user", dest='fallback_user', metavar='USER', help="fallback review user")
|
||||||
|
parser.add_option("--fallback-group", dest='fallback_group', metavar='GROUP', help="fallback review group")
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
@ -334,6 +365,15 @@ class CommandLineInterface(cmdln.Cmdln):
|
|||||||
|
|
||||||
self.checker = self.setup_checker()
|
self.checker = self.setup_checker()
|
||||||
|
|
||||||
|
if self.options.review_mode:
|
||||||
|
self.checker.review_mode = self.options.review_mode
|
||||||
|
|
||||||
|
if self.options.fallback_user:
|
||||||
|
self.checker.fallback_user = self.options.fallback_user
|
||||||
|
|
||||||
|
if self.options.fallback_group:
|
||||||
|
self.checker.fallback_group = self.options.fallback_group
|
||||||
|
|
||||||
def setup_checker(self):
|
def setup_checker(self):
|
||||||
""" reimplement this """
|
""" reimplement this """
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user