def _create_trainings(self):
     self.csv_reader = CSVReader(self.file_name, delimiter=self.delimiter,
                                 newline='')
     lines = self.csv_reader.read_file()
     if self.keyword_skipper:
         lines = self.keyword_skipper.skip_rows_by_keywords(lines)
     self.training_pool = TrainingPoolCrafter(self.title_column_num,
                                              self.time_column_num,
                                              lines)
class TrainingTimeCalculator(object):
    def __init__(self, file_name, exclude_file):
        self.file_name = file_name
        self.exclude_file = exclude_file
        self.csv_reader = None

        self.total_time = tuple()

        self.delimiter = None
        self.title_column_num = 0
        self.time_column_num = 1
        self.keyword_skipper = None
        self.training_pool = None

    def _create_trainings(self):
        self.csv_reader = CSVReader(self.file_name, delimiter=self.delimiter,
                                    newline='')
        lines = self.csv_reader.read_file()
        if self.keyword_skipper:
            lines = self.keyword_skipper.skip_rows_by_keywords(lines)
        self.training_pool = TrainingPoolCrafter(self.title_column_num,
                                                 self.time_column_num,
                                                 lines)

    def _setup_training_pool(self):
        if not self.training_pool:
            self._create_trainings()

    def setup_options(self, delimiter='|', title_column_num=0, time_column_num=0):
        self.delimiter = delimiter
        self.title_column_num = title_column_num
        self.time_column_num = time_column_num

    def print_report(self):
        self._setup_training_pool()
        self.training_pool.print_report()

    def _filter_trainings(self, trainings=None):
        training_filter = TrainingsPoolFilter(self.training_pool, self.exclude_file)
        return training_filter.filter_trainings(trainings)

    def _interactive_exclusion(self):
        exclude_question = 'Do you want to exclude any of the trainings?(y/n)'
        exclude_answers = ('y', 'n')
        prompt = PromptWrapper(exclude_question,
                               accepted_answers=exclude_answers)
        exclude_choice = prompt.get_prompt_answer()
        return exclude_choice == 'y'

    def exclude(self, exclusions=None):
        filtered_pool = self._filter_trainings(exclusions)
        if len(filtered_pool.trainings) != len(self.training_pool.trainings):
            self.training_pool = filtered_pool

    def autorun(self):
        self._setup_training_pool()
        if self.exclude_file or self._interactive_exclusion():
            self.exclude()
        self.print_report()

    def get_report(self):
        return self.training_pool.get_report()

    def gui_report(self):
        self._setup_training_pool()
        if self.exclude_file:
            self.exclude()
        return self.get_report()