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