# prediction_controller.py from dateutil.relativedelta import relativedelta from datetime import datetime, timedelta import math class PredictionController: def __init__(self, calendar_manager, date_calculator, keyword_list): self.calendar_manager = calendar_manager self.date_calculator = date_calculator self.launch_date = None self.duration = None self.prediction = None self.keyword_list = keyword_list for keyword in keyword_list: self.keyword = [] def set_parameters(self, launch_date, duration_years): self.launch_date = datetime.fromisoformat(launch_date) self.duration = relativedelta(years=duration_years) def make_prediction(self, launch_date, duration_years): self.set_parameters(launch_date, duration_years) prediction = self.launch_date + self.duration - timedelta(days=1) keyword_args = {} for entry in self.calendar_manager.entries: for keyword in self.keyword_list: if entry.keyword == keyword: if keyword not in keyword_args: keyword_args[keyword] = [] keyword_args[keyword].append((entry.start_date, entry.end_date, entry.id)) break # print(keyword_args) prediction, corrected_events = self.date_calculator.calculate_prediction(self.launch_date, self.duration, **keyword_args) self.prediction = prediction self.calendar_manager.correct_dates(corrected_events) def get_launch_date(self): return self.launch_date def get_duration(self): return self.duration def get_prediction(self): return self.prediction