osclib/core: rework as package_list_kind_filtered().

This commit is contained in:
Jimmy Berry 2019-05-13 16:20:53 -05:00
parent feca459bb7
commit 45bc515ed8
3 changed files with 19 additions and 11 deletions

View File

@ -16,7 +16,7 @@ from osclib.comments import CommentAPI
from osclib.conf import Config from osclib.conf import Config
from osclib.core import devel_project_fallback from osclib.core import devel_project_fallback
from osclib.core import entity_email from osclib.core import entity_email
from osclib.core import package_list_without_links from osclib.core import package_list_kind_filtered
from osclib.core import request_age from osclib.core import request_age
from osclib.stagingapi import StagingAPI from osclib.stagingapi import StagingAPI
from osclib.util import mail_send from osclib.util import mail_send
@ -107,7 +107,7 @@ def notify(args):
# devel_project_fallback() must be used on a per package basis. # devel_project_fallback() must be used on a per package basis.
packages = args.packages packages = args.packages
if not packages: if not packages:
packages = package_list_without_links(apiurl, args.project) packages = package_list_kind_filtered(apiurl, args.project)
maintainer_map = {} maintainer_map = {}
for package in packages: for package in packages:
devel_project, devel_package = devel_project_fallback(apiurl, args.project, package) devel_project, devel_package = devel_project_fallback(apiurl, args.project, package)

View File

@ -10,7 +10,7 @@ from osc import oscerr
from osc.core import get_request_list from osc.core import get_request_list
from osclib.cache import Cache from osclib.cache import Cache
from osclib.cache_manager import CacheManager from osclib.cache_manager import CacheManager
from osclib.core import package_list_without_links from osclib.core import package_list_kind_filtered
from osclib.core import project_attribute_list from osclib.core import project_attribute_list
from osclib.origin import config_load from osclib.origin import config_load
from osclib.origin import config_origin_list from osclib.origin import config_origin_list
@ -139,8 +139,7 @@ def osrt_origin_lookup(apiurl, project, force_refresh=False, previous=False, qui
if previous: if previous:
return None return None
packages = package_list_without_links(apiurl, project) packages = package_list_kind_filtered(apiurl, project)
logging.debug('{} packages found in {}'.format(len(packages), project))
lookup = {} lookup = {}
for package in packages: for package in packages:

View File

@ -300,18 +300,27 @@ def project_pseudometa_file_ensure(apiurl, project, filename, content, comment=N
project_pseudometa_file_save(apiurl, project, filename, content, comment) project_pseudometa_file_save(apiurl, project, filename, content, comment)
# Should be an API call that says give me "real" packages that does not include # Should be an API call that says give me "real" packages that does not include
# multibuild entries nor linked packages. # multibuild entries, nor linked packages, nor maintenance update packages, but
def package_list_without_links(apiurl, project): # does included inherited packages from project layering. Unfortunately, no such
# call provides either server-side filtering nor enough information to filter
# client-side. As such extra calls must be made for each package to handle the
# various different cases that can exist between products. For a more detailed
# write-up see the opensuse-buildservice mailing list thread:
# https://lists.opensuse.org/opensuse-buildservice/2019-05/msg00020.html.
def package_list_kind_filtered(apiurl, project, kinds_allowed=['source']):
query = { query = {
'view': 'info', 'view': 'info',
'nofilename': '1', 'nofilename': '1',
} }
url = makeurl(apiurl, ['source', project], query) url = makeurl(apiurl, ['source', project], query)
root = ETL.parse(http_GET(url)).getroot() root = ETL.parse(http_GET(url)).getroot()
return root.xpath(
'//sourceinfo[not(./linked[@project="{}"]) and ' for package in root.xpath('sourceinfo/@package'):
'not(contains(@package, ":"))' kind = package_kind(apiurl, project, package)
'and not(starts-with(@package, "00"))]/@package'.format(project)) if kind not in kinds_allowed:
continue
yield package
def attribute_value_load(apiurl, project, name, namespace='OSRT'): def attribute_value_load(apiurl, project, name, namespace='OSRT'):
url = makeurl(apiurl, ['source', project, '_attribute', namespace + ':' + name]) url = makeurl(apiurl, ['source', project, '_attribute', namespace + ':' + name])