2017-06-14 23:50:28 -05:00
|
|
|
from xml.etree import cElementTree as ET
|
|
|
|
|
2017-05-11 23:31:27 -05:00
|
|
|
import osc.core
|
2017-06-14 23:50:28 -05:00
|
|
|
from osc.core import http_GET
|
|
|
|
from osc.core import makeurl
|
2017-06-14 23:50:57 -05:00
|
|
|
from osc.core import show_project_meta
|
2017-06-14 23:50:28 -05:00
|
|
|
|
|
|
|
from osclib.memoize import memoize
|
|
|
|
|
2017-05-11 23:31:27 -05:00
|
|
|
|
|
|
|
@memoize(session=True)
|
|
|
|
def owner_fallback(apiurl, project, package):
|
|
|
|
root = osc.core.owner(apiurl, package, project=project)
|
|
|
|
owner = root.find('owner')
|
|
|
|
if not owner or owner.get('project') == project:
|
|
|
|
# Fallback to global (ex Factory) maintainer.
|
|
|
|
root = osc.core.owner(apiurl, package)
|
|
|
|
return root
|
|
|
|
|
2017-06-20 16:34:35 -05:00
|
|
|
@memoize(session=True)
|
|
|
|
def maintainers_get(apiurl, project, package=None):
|
|
|
|
if package is None:
|
|
|
|
meta = ET.fromstring(''.join(show_project_meta(apiurl, project)))
|
|
|
|
return [p.get('userid') for p in meta.findall('.//person') if p.get('role') == 'maintainer']
|
|
|
|
|
2017-05-11 23:31:27 -05:00
|
|
|
root = owner_fallback(apiurl, project, package)
|
|
|
|
maintainers = [p.get('name') for p in root.findall('.//person') if p.get('role') == 'maintainer']
|
|
|
|
if not maintainers:
|
|
|
|
for group in [p.get('name') for p in root.findall('.//group') if p.get('role') == 'maintainer']:
|
|
|
|
url = makeurl(apiurl, ('group', group))
|
|
|
|
root = ET.parse(http_GET(url)).getroot()
|
|
|
|
maintainers = maintainers + [p.get('userid') for p in root.findall('./person/person')]
|
|
|
|
return maintainers
|
|
|
|
|
2017-06-14 23:50:28 -05:00
|
|
|
@memoize(session=True)
|
|
|
|
def package_list(apiurl, project):
|
|
|
|
url = makeurl(apiurl, ['source', project], { 'expand': 1 })
|
|
|
|
root = ET.parse(http_GET(url)).getroot()
|
|
|
|
|
|
|
|
packages = []
|
|
|
|
for package in root.findall('entry'):
|
|
|
|
packages.append(package.get('name'))
|
|
|
|
|
|
|
|
return sorted(packages)
|
2017-06-14 23:50:57 -05:00
|
|
|
|
|
|
|
@memoize(session=True)
|
|
|
|
def target_archs(apiurl, project):
|
|
|
|
meta = show_project_meta(apiurl, project)
|
|
|
|
meta = ET.fromstring(''.join(meta))
|
|
|
|
archs = []
|
|
|
|
for arch in meta.findall('repository[@name="standard"]/arch'):
|
|
|
|
archs.append(arch.text)
|
|
|
|
return archs
|