Merge pull request #469 from lnussel/review

Implement configurable review mode
This commit is contained in:
Ludwig Nussel 2016-03-17 16:59:13 +01:00
commit 8e839974e9

View File

@ -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 """