def iterate_over_args(main_fn, framework, cred_args, proto_name, stop_on_first): ''' @param cred_args: parameters you decided to iterate over ''' vector = ObjectStateHolderVector() framework = flow.RichFramework(framework) creds_manager = flow.CredsManager(framework) # as cred_args possibly generator or iterator, realize only first first_ = first(cred_args) if first_ is None: logger.reportErrorObject(flow._create_missed_creds_error(proto_name)) else: # restore cred_args cred_args = chain((first_,), cred_args) connection_exs = [] discovery_exs = [] warnings = [] at_least_once_discovered = False for args in cred_args: try: oshs, warnings_ = main_fn(framework, creds_manager, *args) warnings.extend(warnings_ or ()) vector.addAll(oshs) at_least_once_discovered = True if stop_on_first: break except flow.ConnectionException, ce: logger.debugException(str(ce)) connection_exs.append(ce) except (flow.DiscoveryException, Exception, JException), de: logger.debugException(str(de)) discovery_exs.append(de)
def wrapper(framework): client_factories_provider = kwargs.get('client_factories_provider') if not client_factories_provider: client_factories_provider = default_client_factories_provider proto_name = kwargs.get('protocol_name') stop_on_first = kwargs.get('stop_on_first') vector = ObjectStateHolderVector() framework = RichFramework(framework) if not proto_name: proto_name = framework.get_dest_attribute('Protocol') creds_manager = CredsManager(framework) client_factories = client_factories_provider(framework, creds_manager) first_factory = take(0, 1, client_factories) if not first_factory: logger.reportErrorObject(_create_missed_creds_error(proto_name)) else: connection_exs = [] discovery_exs = [] warnings = [] at_least_once_discovered = False oshs = [] client_factories = list(itertools.chain(first_factory, client_factories)) main_fn = original_fn for index, client_factory in enumerate(client_factories): try: with client_factory() as client: args_ = (framework, client, index) kwargs_ = {} oshs_, warnings_ = main_fn(*args_, **kwargs_) oshs.extend(oshs_) warnings.extend(warnings_) at_least_once_discovered = True if stop_on_first: break except ConnectionException, ce: logger.debugException(str(ce)) connection_exs.append(ce) except (DiscoveryException, Exception), de: logger.debugException(str(de)) discovery_exs.append(de)