core: extract maintainers_get(), owner_fallback() from MaintenanceChecker.
Allows the code to be properly shared between checkrepo and check_maintenance_incidents as a todo suggests. Given that the majority of similar cases for code sharing are extension of osc.core it seems to make sense to place them in osclib.core.
This commit is contained in:
parent
ad81ff98f9
commit
7c6f67979a
@ -36,6 +36,8 @@ import urllib2
|
||||
import yaml
|
||||
|
||||
from osclib.memoize import memoize
|
||||
from osclib.core import owner_fallback
|
||||
from osclib.core import maintainers_get
|
||||
|
||||
import ReviewBot
|
||||
|
||||
@ -47,32 +49,11 @@ class MaintenanceChecker(ReviewBot.ReviewBot):
|
||||
ReviewBot.ReviewBot.__init__(self, *args, **kwargs)
|
||||
self.review_messages = {}
|
||||
|
||||
@memoize(session=True)
|
||||
def owner_fallback(self, project, package):
|
||||
root = osc.core.owner(self.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(self.apiurl, package)
|
||||
return root
|
||||
|
||||
# XXX: share with checkrepo
|
||||
def _maintainers(self, project, package):
|
||||
"""Get the maintainer of the package involved in the package."""
|
||||
root = self.owner_fallback(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 = osc.core.makeurl(self.apiurl, ('group', group))
|
||||
root = ET.parse(osc.core.http_GET(url)).getroot()
|
||||
maintainers = maintainers + [p.get('userid') for p in root.findall('./person/person')]
|
||||
return maintainers
|
||||
|
||||
def add_devel_project_review(self, req, package):
|
||||
""" add devel project/package as reviewer """
|
||||
a = req.actions[0]
|
||||
project = a.tgt_releaseproject if a.type == 'maintenance_incident' else req.actions[0].tgt_project
|
||||
root = self.owner_fallback(project, package)
|
||||
root = owner_fallback(self.apiurl, project, package)
|
||||
|
||||
package_reviews = set((r.by_project, r.by_package) for r in req.reviews if r.by_project)
|
||||
for p in root.findall('./owner'):
|
||||
@ -133,7 +114,7 @@ class MaintenanceChecker(ReviewBot.ReviewBot):
|
||||
self.logger.info("{} submitted from {}, no maintainer review needed".format(pkgname, a.src_project))
|
||||
return
|
||||
|
||||
maintainers = set(self._maintainers(project, pkgname))
|
||||
maintainers = set(maintainers_get(self.apiurl, project, pkgname))
|
||||
if maintainers:
|
||||
known_maintainer = False
|
||||
for m in maintainers:
|
||||
|
@ -28,6 +28,7 @@ from osc.core import http_DELETE
|
||||
from osc.core import http_GET
|
||||
from osc.core import http_POST
|
||||
from osc.core import makeurl
|
||||
from osclib.core import maintainers_get
|
||||
from osclib.stagingapi import StagingAPI
|
||||
from osclib.memoize import memoize
|
||||
from osclib.pkgcache import PkgCache
|
||||
@ -965,15 +966,6 @@ class CheckRepo(object):
|
||||
deps.update(pkgdep.text for pkgdep in root.findall('.//pkgdep'))
|
||||
return deps
|
||||
|
||||
def _maintainers(self, request):
|
||||
"""Get the maintainer of the package involved in the request."""
|
||||
query = {
|
||||
'binary': request.tgt_package,
|
||||
}
|
||||
url = makeurl(self.apiurl, ('search', 'owner'), query=query)
|
||||
root = ET.parse(http_GET(url)).getroot()
|
||||
return [p.get('name') for p in root.findall('.//person') if p.get('role') == 'maintainer']
|
||||
|
||||
def _author(self, request):
|
||||
"""Get the author of the request."""
|
||||
query = {
|
||||
@ -1009,7 +1001,7 @@ class CheckRepo(object):
|
||||
"""
|
||||
reasons = []
|
||||
whatdependson = self._whatdependson(request)
|
||||
maintainers = self._maintainers(request)
|
||||
maintainers = maintainers_get(self.apiurl, request.tgt_project, request.tgt_package)
|
||||
author = self._author(request)
|
||||
prj_maintainers = self._project_maintainer(request)
|
||||
|
||||
|
@ -1,11 +1,33 @@
|
||||
from xml.etree import cElementTree as ET
|
||||
|
||||
import osc.core
|
||||
from osc.core import http_GET
|
||||
from osc.core import makeurl
|
||||
from osc.core import show_project_meta
|
||||
|
||||
from osclib.memoize import memoize
|
||||
|
||||
|
||||
@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
|
||||
|
||||
def maintainers_get(apiurl, project, package):
|
||||
"""Get the maintainer of the package involved in the package."""
|
||||
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
|
||||
|
||||
@memoize(session=True)
|
||||
def package_list(apiurl, project):
|
||||
url = makeurl(apiurl, ['source', project], { 'expand': 1 })
|
||||
|
Loading…
x
Reference in New Issue
Block a user