From 57376ec9d784ef2baad311eef5dce031694bf0bf Mon Sep 17 00:00:00 2001 From: Yuming Zhu Date: Nov 04 2020 09:37:11 +0000 Subject: use with statement for multicalling listTasks --- diff --git a/src/plugins/cli/replicate-tasks.py b/src/plugins/cli/replicate-tasks.py index 5410145..7cbd955 100644 --- a/src/plugins/cli/replicate-tasks.py +++ b/src/plugins/cli/replicate-tasks.py @@ -2,6 +2,7 @@ import queue import logging import threading from enum import Enum +from functools import reduce import six @@ -60,7 +61,6 @@ def handle_replicate_tasks(options, session, args): def get_tasks(session, parser, opts): - tasks = [] channels = opts.channels hosts = opts.hosts methods = opts.methods @@ -98,37 +98,37 @@ def get_tasks(session, parser, opts): if offset: queryOpts['offset'] = offset queryOpts['order'] = '-id' - session.multicall = True - if channel_ids: - for channel_id in channel_ids: - if methods: - for method in methods: - session.listTasks(dict(options, method=method, - channel_id=channel_id), - queryOpts) - else: - session.listTasks(dict(options, channel_id=channel_id), - queryOpts) - - elif host_ids: - for host_id in host_ids: + cvs = [] + with session.multicall() as m: + if channel_ids: + for channel_id in channel_ids: + if methods: + for method in methods: + cvs.append((m.listTasks(dict(options, method=method, + channel_id=channel_id), + queryOpts))) + else: + cvs.append(m.listTasks(dict(options, channel_id=channel_id), queryOpts)) + elif host_ids: + for host_id in host_ids: + if methods: + for method in methods: + cvs.append(m.listTasks(dict(options, method=method, host_id=host_id), + queryOpts)) + else: + cvs.append(m.listTasks(dict(options, host_id=host_id), queryOpts)) + else: if methods: for method in methods: - session.listTasks(dict(options, method=method, - host_id=host_id), - queryOpts) + cvs.append(m.listTasks(dict(options, method=method), queryOpts)) else: - session.listTasks(dict(options, host_id=host_id), - queryOpts) - else: - if methods: - for method in methods: - session.listTasks(dict(options, method=method), queryOpts) - else: - session.listTasks(options, queryOpts) - tasks = sum(sum(session.multiCall(), []), tasks) + cvs.append(m.listTasks(options, queryOpts)) + tasks = sum([cv.result for cv in cvs], []) + print(tasks) if not tasks: raise koji.GenericError("no tasks to replicate.") + else: + logger.debug("to replicate tasks:\n%s", "\n".join([str(t['id']) for t in tasks])) return tasks