Fetch request info from different api url

This commit is contained in:
Ludwig Nussel 2016-12-23 13:59:17 +01:00
parent d21dbfb8c4
commit dd26743202
2 changed files with 41 additions and 3 deletions

View File

@ -28,6 +28,7 @@ from collections import namedtuple
from osclib.memoize import memoize from osclib.memoize import memoize
import signal import signal
import datetime import datetime
from collections import namedtuple
try: try:
from xml.etree import cElementTree as ET from xml.etree import cElementTree as ET
@ -62,6 +63,31 @@ class ReviewBot(object):
self.fallback_user = None self.fallback_user = None
self.fallback_group = 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 @property
def review_mode(self): def review_mode(self):
return self._review_mode 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("--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-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("--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 return parser
@ -383,6 +410,8 @@ class CommandLineInterface(cmdln.Cmdln):
osc.conf.config['debug'] = 1 osc.conf.config['debug'] = 1
self.checker = self.setup_checker() self.checker = self.setup_checker()
if self.options.config:
self.checker.load_config(self.options.config)
if self.options.review_mode: if self.options.review_mode:
self.checker.review_mode = self.options.review_mode self.checker.review_mode = self.options.review_mode

View File

@ -130,16 +130,25 @@ class FactorySourceChecker(ReviewBot.ReviewBot):
def _check_requests(self, project, package, rev): def _check_requests(self, project, package, rev):
self.logger.debug("checking requests") self.logger.debug("checking requests")
prjprefix = ''
try: 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): except (urllib2.HTTPError, urllib2.URLError):
self.logger.error("caught exception while checking %s/%s", project, package) self.logger.error("caught exception while checking %s/%s", project, package)
return None return None
for req in requests: for req in requests:
for a in req.actions: for a in req.actions:
si = self.get_sourceinfo(a.src_project, a.src_package, a.src_rev) si = self.get_sourceinfo(prjprefix + 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)) self.logger.debug("rq %s: %s/%s@%s"%(req.reqid, prjprefix + a.src_project, a.src_package, si.verifymd5))
if si.verifymd5 == rev: if si.verifymd5 == rev:
if req.state.name == 'new': if req.state.name == 'new':
self.logger.info("sr#%s ok", req.reqid) self.logger.info("sr#%s ok", req.reqid)