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
|
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
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user