Source code for python_wrap_cases.generators.sync_list_generator

from __future__ import unicode_literals
from .base_generator import BaseGenerator


[docs]class SyncListGenerator(BaseGenerator):
def __init__(self, collection): self.collection = collection self.dependent_generators = [] def __len__(self): return len(self.collection) def register_dependency(self, arg_index, key, collection): self.dependent_generators.append((arg_index, key, collection)) def generate_cases(self, arg_index, key, *args, **kwargs): sync_generators = self.get_sync_generators(*args, **kwargs) size = min(list(map(len, sync_generators)) + [len(self)]) for generator in sync_generators: generator.register_dependency(arg_index, key, self.collection) index = self.get_current_index(*args, **kwargs) if index is not None: return [self.collection[index]] else: return self.collection[:size] def get_sync_generators(self, *args, **kwargs): sync_generators = [] for arg in args: if isinstance(arg, self.__class__) and arg is not self: sync_generators.append(arg) for arg in kwargs.values(): if isinstance(arg, self.__class__) and arg is not self: sync_generators.append(arg) return sync_generators def get_current_index(self, *args, **kwargs): if not self.dependent_generators: return None arg_index, key, collection = self.dependent_generators[0] if arg_index is not None: value = args[arg_index] else: value = kwargs[key] return collection.index(value)