def is_in_school_year(self, date: datetime): school_start = datetime.strptime(self.fisd_schedule.get("StartDate"), "%m/%d/%Y") school_end = datetime.strptime(self.fisd_schedule.get("EndDate"), "%m/%d/%Y") return school_start.date() < date.date() and school_end.date( ) > date.date()
def get_week(self, date: datetime): week_num: int = int(date.strftime("%U") ) num_weeks: int = next( (item for item in self.virtual_schedule if item["sk"] == "SETTINGS" ) ) if date.year > self.start_date.year: week_num = 53 + int(date.strftime("%U")) # Remove holiday weeks: week_num = week_num - self.remove_holiday_weeks(date) return (( week_num - self.week_one ) % num_weeks.get("num_weeks", 2) ) + 1
def is_holiday(self, date: datetime): if not self.is_in_school_year(date): return "School is not in session on {}".format( date.strftime("%b %d")) if date.strftime("%A") in ["Saturday", "Sunday"]: return "No school on {}".format(date.strftime("%A")) holiday = self.get_holiday_in_list(date.strftime("%m/%d/%Y")) if holiday != None: return "NO SCHOOL: {}.".format(holiday.get("name")) else: return None
def get_schedule_for_day(self, date: datetime): day_of_week = date.strftime("%A") week_num: int = int(date.strftime("%U") ) if date.year > self.start_date.year: week_num = 53 + int(date.strftime("%U")) # week = (( week_num - self.week_one ) % 2 ) + 1 week = self.get_week(date) print (f"Current Week {week}, updated week {self.get_week(date)}") # print("Day of week: {}, Week Number: {}, week: {}".format(day_of_week, week_num, week)) week_schedule = next( (item for item in self.virtual_schedule \ if item["sk"] == "WEEK{week}|{dow}".format(week=week,dow=day_of_week )) ) return week_schedule
def is_date_holiday(self, holiday_date: datetime): if not self.is_date_in_schedule(holiday_date): return "School is not in session on {}".format( holiday_date.strftime("%b %d")) if holiday_date.strftime("%A") in ["Saturday", "Sunday"]: return "No school on {}".format(holiday_date.strftime("%A")) str_date = holiday_date.strftime('%m/%d/%Y') holiday_rec = next( (item for item in self.fisd_schedule \ if item["sk"].startswith("HOLIDAY") and item["start"] == str_date), None) # print("HOLIDAY REC {}".format(holiday_rec)) return holiday_rec if holiday_rec == None else \ "NO SCHOOL: {}.".format(holiday_rec.get('sk').replace('HOLIDAY|', ''))
def what_is_my_schedule(self, student: str, date: datetime): calculator = Calculator(student) print('What is the School Schedule for {} ?'.format(calculator.name)) try: sched = calculator.is_there_school(date) # print (sched) print( " ===================== {} School Schedule For {} ========================================" .format(sched.get("name"), date.strftime("%A, %b %d, %Y"))) if sched.get("schedule") != None: schedule = sched.get("schedule") calculator.print_schedule(schedule) else: print(sched.get("message")) print(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~") except ValueError as e: print("COULD NOT FIND SCHEDULE!") print(e)
def is_there_school(self, date: datetime): print("Generating schedule for ", date.strftime("%A, %d. %B %Y %I:%M%p")) is_holiday = self.school_calendar.is_holiday(date) if is_holiday != None: return dict(schedule=None, message=is_holiday, name=self.name) self.term = self.school_calendar.get_term(date) print("Schedule for TERM: ", self.term) schedule = None try: schedule = self.daily_calendar.get_schedule_for_date( date, self.term) schedule = self.virtual_calendar.add_virtual_week_to_schedule( date, schedule) except: raise RuntimeError("Could not derive schedule for {}".format( self.name)) if schedule != None: return dict(schedule=schedule, message=None, name=self.name) else: raise ValueError("Could not determine schedule for {}".format( self.name))
def datetime_to_str(para_datetime: datetime) -> str: return para_datetime.strftime(f'[%Y-%m-%d %H:%M:%S]')
def date_in_term(date: datetime, term: dict): start_of_term = datetime.strptime(term.get("start"), "%m/%d/%Y") end_of_term = datetime.strptime(term.get("end"), "%m/%d/%Y") return start_of_term.date() <= date.date() and end_of_term.date( ) >= date.date()
def formatDateForKey(date: datetime): return date.strftime("%Y%m%d")