class TrainingsPoolFilter(object): def __init__(self, traing_pool, exclude_file=None): self.training_pool = copy(traing_pool) self.exclude_reader = FileReader(exclude_file) if exclude_file else None @staticmethod def _setup_exclude_prompt(): exclude_question = 'Do you want to exclude? (y=yes, n=no, q=quit)' exclude_answers = ('y', 'n', 'q') prompt = PromptWrapper(exclude_question, accepted_answers=exclude_answers) return prompt def _exclude_training(self, training): self.training_pool.remove_training(training) def _exclude_multiple_trainings(self, training_stack): for training in training_stack: self._exclude_training(training) def _exclude_interactively(self): prompt = self._setup_exclude_prompt() for training in self.training_pool.trainings: print(training.title) choice = prompt.get_prompt_answer().lower() if choice == 'y': self._exclude_training(training) elif choice == 'n': continue elif choice == 'q': break def _exclude_from_file(self): exclusions = [[x, 0] for x in self.exclude_reader.read_file()] trainings_to_exclude = TrainingsPool(exclusions) self._exclude_multiple_trainings(trainings_to_exclude.trainings) def filter_trainings(self, trainings=None): if trainings: for i, training in enumerate(self.training_pool.trainings): if i in trainings: self._exclude_training(training) elif not self.exclude_reader: self._exclude_interactively() else: self._exclude_from_file() return self.training_pool
def __init__(self, traing_pool, exclude_file=None): self.training_pool = copy(traing_pool) self.exclude_reader = FileReader(exclude_file) if exclude_file else None