From f8c6fd34e8b561bbbc9b2982376c23b020e7872c Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Dec 04 2023 09:29:04 +0000 Subject: Merge #71 `Fix arg handling for listTagged` --- diff --git a/src/bin/koji-change-volumes b/src/bin/koji-change-volumes index b501d68..e50e598 100755 --- a/src/bin/koji-change-volumes +++ b/src/bin/koji-change-volumes @@ -292,6 +292,7 @@ def feeder_main(opts, args): global session session = get_session() + i = 0 for i, build in enumerate(get_builds(opts, args), start=1): while build_queue.qsize() > 1000: # avoid overloading the queue @@ -315,8 +316,15 @@ def get_builds(options, args): yield binfo return if options.tag: - for binfo in get_tagged_builds(options, args): - yield binfo + # unfortunately the listTagged call doesn't return all the fields we need + _builds = get_tagged_builds(options, args) + # chunk and use getBuild with multicall + nchunk = 1000 + for i in range(0, len(_builds), nchunk): + with session.multicall() as m: + chunk = [m.getBuild(b['id'], strict=True) for b in _builds[i:i+nchunk]] + for binfo in chunk: + yield binfo.result return chunksize = 10000 opts = {} @@ -390,21 +398,21 @@ def get_tagged_builds(options, args): if options.type is not None: opts['type'] = options.type if options.package: + # our call requires a name, but the script will also accept an id + package = options.package try: - opts['packageID'] = int(options.package) + package = int(package) except ValueError: - package = session.getPackageID(options.package) - if package is None: - raise ValueError('invalid package option') - opts['package'] = package + pass + opts['package'] = session.getPackage(package, strict=True)['name'] if options.owner: + # our call requires a name, but the script will also accept an id + owner = options.owner try: - opts['userID'] = int(options.owner) + owner = int(owner) except ValueError: - user = session.getUser(options.owner) - if user is None: - raise ValueError("Invalid owner option") - opts['owner'] = user['id'] + pass + opts['owner'] = session.getUser(owner, strict=True)['name'] if options.volume: raise ValueError('The --volume option is incompatible with --tag') for opt in ('before', 'after'): diff --git a/src/bin/koji-check-builds b/src/bin/koji-check-builds index 8df9895..8f0f395 100755 --- a/src/bin/koji-check-builds +++ b/src/bin/koji-check-builds @@ -252,6 +252,7 @@ def feeder_main(opts, args): '''Fetch builds and feed them into the queu''' global session session = new_session() + i = 0 for i, build in enumerate(get_builds(opts, args), start=1): while queue.qsize() > 1000: # avoid overloading the queue @@ -360,21 +361,21 @@ def get_tagged_builds(options, args): if options.type is not None: opts['type'] = options.type if options.package: + # our call requires a name, but the script will also accept an id + package = options.package try: - opts['packageID'] = int(options.package) + package = int(package) except ValueError: - package = session.getPackageID(options.package) - if package is None: - raise ValueError('invalid package option') - opts['package'] = package + pass + opts['package'] = session.getPackage(package, strict=True)['name'] if options.owner: + # our call requires a name, but the script will also accept an id + owner = options.owner try: - opts['userID'] = int(options.owner) + owner = int(owner) except ValueError: - user = session.getUser(options.owner) - if user is None: - raise ValueError("Invalid owner option") - opts['owner'] = user['id'] + pass + opts['owner'] = session.getUser(owner, strict=True)['name'] if options.volume: raise ValueError('The --volume option is incompatible with --tag') for opt in ('before', 'after'): diff --git a/src/bin/koji-fix-build-symlink b/src/bin/koji-fix-build-symlink index 84e0f35..635f24d 100755 --- a/src/bin/koji-fix-build-symlink +++ b/src/bin/koji-fix-build-symlink @@ -260,6 +260,7 @@ def feeder_main(opts, args): global session session = get_session() + i = 0 for i, build in enumerate(get_builds(opts, args), start=1): while build_queue.qsize() > 1000: # avoid overloading the queue @@ -366,21 +367,21 @@ def get_tagged_builds(options, args): if options.type is not None: opts['type'] = options.type if options.package: + # our call requires a name, but the script will also accept an id + package = options.package try: - opts['packageID'] = int(options.package) + package = int(package) except ValueError: - package = session.getPackageID(options.package) - if package is None: - raise ValueError('invalid package option') - opts['package'] = package + pass + opts['package'] = session.getPackage(package, strict=True)['name'] if options.owner: + # our call requires a name, but the script will also accept an id + owner = options.owner try: - opts['userID'] = int(options.owner) + owner = int(owner) except ValueError: - user = session.getUser(options.owner) - if user is None: - raise ValueError("Invalid owner option") - opts['owner'] = user['id'] + pass + opts['owner'] = session.getUser(owner, strict=True)['name'] if options.volume: raise ValueError('The --volume option is incompatible with --tag') for opt in ('before', 'after'):