Fetch request info from different api url
This commit is contained in:
parent
d21dbfb8c4
commit
dd26743202
29
ReviewBot.py
29
ReviewBot.py
@ -28,6 +28,7 @@ from collections import namedtuple
|
||||
from osclib.memoize import memoize
|
||||
import signal
|
||||
import datetime
|
||||
from collections import namedtuple
|
||||
|
||||
try:
|
||||
from xml.etree import cElementTree as ET
|
||||
@ -62,6 +63,31 @@ class ReviewBot(object):
|
||||
self.fallback_user = None
|
||||
self.fallback_group = None
|
||||
|
||||
# map of default config entries
|
||||
self.config_defaults = {
|
||||
# list of tuples (prefix, apiurl)
|
||||
# set this if the obs instance maps another instance into it's
|
||||
# namespace
|
||||
'project_namespace_api_map' : [
|
||||
('openSUSE.org:', 'https://api.opensuse.org'),
|
||||
],
|
||||
}
|
||||
|
||||
self.load_config()
|
||||
|
||||
def _load_config(self, handle = None):
|
||||
d = self.config_defaults
|
||||
y = yaml.safe_load(handle) if handle is not None else {}
|
||||
return namedtuple('BotConfig', sorted(d.keys()))(*[ y.get(p, d[p]) for p in sorted(d.keys()) ])
|
||||
|
||||
def load_config(self, filename = None):
|
||||
if filename:
|
||||
fh = open(filename, 'r')
|
||||
self.config = self._load_config(fh)
|
||||
close(fh)
|
||||
else:
|
||||
self.config = self._load_config()
|
||||
|
||||
@property
|
||||
def review_mode(self):
|
||||
return self._review_mode
|
||||
@ -364,6 +390,7 @@ class CommandLineInterface(cmdln.Cmdln):
|
||||
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")
|
||||
parser.add_option('-c', '--config', dest='config', metavar='FILE', help='read config file FILE')
|
||||
|
||||
return parser
|
||||
|
||||
@ -383,6 +410,8 @@ class CommandLineInterface(cmdln.Cmdln):
|
||||
osc.conf.config['debug'] = 1
|
||||
|
||||
self.checker = self.setup_checker()
|
||||
if self.options.config:
|
||||
self.checker.load_config(self.options.config)
|
||||
|
||||
if self.options.review_mode:
|
||||
self.checker.review_mode = self.options.review_mode
|
||||
|
@ -130,16 +130,25 @@ class FactorySourceChecker(ReviewBot.ReviewBot):
|
||||
|
||||
def _check_requests(self, project, package, rev):
|
||||
self.logger.debug("checking requests")
|
||||
prjprefix = ''
|
||||
try:
|
||||
requests = osc.core.get_request_list(self.apiurl, project, package, None, ['new', 'review'], 'submit')
|
||||
apiurl = self.apiurl
|
||||
if self.config.project_namespace_api_map:
|
||||
for prefix, url in self.config.project_namespace_api_map:
|
||||
if project.startswith(prefix):
|
||||
apiurl = url
|
||||
prjprefix = prefix
|
||||
project = project[len(prefix):]
|
||||
break
|
||||
requests = osc.core.get_request_list(apiurl, project, package, None, ['new', 'review'], 'submit')
|
||||
except (urllib2.HTTPError, urllib2.URLError):
|
||||
self.logger.error("caught exception while checking %s/%s", project, package)
|
||||
return None
|
||||
|
||||
for req in requests:
|
||||
for a in req.actions:
|
||||
si = self.get_sourceinfo(a.src_project, a.src_package, a.src_rev)
|
||||
self.logger.debug("rq %s: %s/%s@%s"%(req.reqid, a.src_project, a.src_package, si.verifymd5))
|
||||
si = self.get_sourceinfo(prjprefix + a.src_project, a.src_package, a.src_rev)
|
||||
self.logger.debug("rq %s: %s/%s@%s"%(req.reqid, prjprefix + a.src_project, a.src_package, si.verifymd5))
|
||||
if si.verifymd5 == rev:
|
||||
if req.state.name == 'new':
|
||||
self.logger.info("sr#%s ok", req.reqid)
|
||||
|
Loading…
x
Reference in New Issue
Block a user