1
0
mirror of https://github.com/openSUSE/osc.git synced 2024-12-27 02:16:12 +01:00

- backward compatibility fix: old apis don't support role filtering

This commit is contained in:
Marcus Huewe 2010-03-12 15:22:11 +01:00
parent 52cac96f20
commit aaf5d9dfaf

View File

@ -4129,12 +4129,13 @@ Please submit there instead, or use --nodevelproject to force direct submission.
if opts.bugowner or opts.maintainer or opts.involved: if opts.bugowner or opts.maintainer or opts.involved:
xpath = xpath_join(xpath, 'person/@userid = \'%s\'' % search_term, inner=True) xpath = xpath_join(xpath, 'person/@userid = \'%s\'' % search_term, inner=True)
role_filter = '%s (%s)' % (search_term, 'person') role_filter = '%s (%s)' % (search_term, 'person')
role_filter_xpath = xpath
if opts.bugowner and not opts.maintainer: if opts.bugowner and not opts.maintainer:
xpath = xpath_join(xpath, 'person/@role=\'bugowner\'', op='and') xpath = xpath_join(xpath, 'person/@role=\'bugowner\'', op='and')
role_filter = '%s (%s)' % (search_term, 'bugowner') role_filter = 'bugowner'
elif not opts.bugowner and opts.maintainer: elif not opts.bugowner and opts.maintainer:
xpath = xpath_join(xpath, 'person/@role=\'maintainer\'', op='and') xpath = xpath_join(xpath, 'person/@role=\'maintainer\'', op='and')
role_filter = '%s (%s)' % (search_term, 'maintainer') role_filter = 'maintainer'
if opts.limit_to_attribute: if opts.limit_to_attribute:
xpath = xpath_join(xpath, 'attribute/@name=\'%s\'' % opts.limit_to_attribute, op='and') xpath = xpath_join(xpath, 'attribute/@name=\'%s\'' % opts.limit_to_attribute, op='and')
@ -4150,7 +4151,30 @@ Please submit there instead, or use --nodevelproject to force direct submission.
what = {'project': xpath} what = {'project': xpath}
elif not opts.project and opts.package: elif not opts.project and opts.package:
what = {'package': xpath} what = {'package': xpath}
res = search(conf.config['apiurl'], **what) try:
res = search(conf.config['apiurl'], **what)
except urllib2.HTTPError, e:
if e.code != 400 or not role_filter:
raise e
# backward compatibility: local role filtering
if opts.limit_to_attribute:
role_filter_xpath = xpath_join(role_filter_xpath, 'attribute/@name=\'%s\'' % opts.limit_to_attribute, op='and')
what = dict([[kind, role_filter_xpath] for kind in what.keys()])
res = search(conf.config['apiurl'], **what)
for kind, root in res.iteritems():
delete = []
for node in root.findall(kind):
found = False
for p in node.findall('person'):
if p.get('userid') == search_term and p.get('role') == role_filter:
found = True
break
if not found:
delete.append(node)
for node in delete:
root.remove(node)
if role_filter:
role_filter = '%s (%s)' % (search_term, role_filter)
for kind, root in res.iteritems(): for kind, root in res.iteritems():
results = [] results = []
for node in root.findall(kind): for node in root.findall(kind):