diff --git a/src/backend/semester.py b/src/backend/semester.py index 91e304e..ce5a18b 100644 --- a/src/backend/semester.py +++ b/src/backend/semester.py @@ -1,46 +1,88 @@ import datetime +from src.logic.log import logger +from dataclasses import dataclass +@dataclass +class Semester: + logger.debug("Semester class loaded") -def generateSemesterByDate(next:bool = False): - currentYear = datetime.datetime.now().year - currentYear = int(str(currentYear)[-2:]) - month = datetime.datetime.now().month - # month = month + 1 - if next: - month += 1 - if month > 12: - month = 1 - currentYear += 1 - if month >= 4 and month <= 9: - return "SoSe " + str(currentYear) - else: - if month in [10, 11, 12]: - return f"WiSe {currentYear}/{currentYear+1}" + _year: int | None = datetime.datetime.now().year + _semester: str | None = None + _month: int | None = datetime.datetime.now().month + value: str = None + logger.debug(f"Got values year:{_year}, semester:{_semester}, month:{_month}") + + def __post_init__(self): + logger.debug( + f"Got values post_init year:{self._year}, semester:{self._semester}, month:{self._month}" + ) + + if self._year is None: + self._year = datetime.datetime.now().year + if self._month is None: + self._month = datetime.datetime.now().month + if self._semester is None: + self.generateSemester() + self.computeValue() + + def __str__(self): + return self.value + + def generateSemester(self): + if self._month < 4 or self._month < 9: + self._semester = "WiSe" else: - return f"WiSe {currentYear-1}/{currentYear}" - - -def generateSemesterByOffset(offset): - currentYear = datetime.datetime.now().year - currentYear = int(str(currentYear)[-2:]) - month = datetime.datetime.now().month - #offset represents a single semester - semester = generateSemesterByDate() - if offset == 1: - if semester.startswith("SoSe"): - return f"WiSe {currentYear}/{currentYear+1}" + self._semester = "SoSe" + + @logger.catch + def computeValue(self): + # year is only last two digits + year = str(self._year)[2:] + year = int(year) + logger.debug( + f"Year is {year}, month is {self._month}, semester is {self._semester}" + ) + if self._semester == "WiSe": + if self._month < 4: + valueyear = str(year - 1) + "/" + str(year) else: - return f"SoSe {currentYear+1}" - else: - #if offset is even, increase the currentyear by offset - if offset % 2 == 0: - if semester.startswith("SoSe"): - return f"SoSe {currentYear+offset//2}" + valueyear = str(year) + self.value = f"{self._semester} {valueyear}" + + @logger.catch + def offset(self, value: int) -> str: + """Generate a new Semester object by offsetting the current semester by a given value + + Args: + value (int): The value by which the semester should be offset + + Returns: + str: the new semester value + """ + assert isinstance(value, int), "Value must be an integer" + logger.debug(f"Offsetting semester by {value}") + if value == 0: + return self + if value > 0: + if value % 2 == 0: + return Semester(self._year + value // 2, self._semester) else: - return f"WiSe {currentYear+1}/{currentYear+2}" + semester = self._semester + semester = "SoSe" if semester == "WiSe" else "WiSe" + logger.debug(f"Semester is {semester}") + return Semester(self._year + value // 2, semester) else: - return f"WiSe {currentYear+offset//2}/{currentYear+1+offset//2}" + if value % 2 == 0: + return Semester(self._year - value // 2, self._semester) + else: + semester = self._semester + semester = "SoSe" if semester == "WiSe" else "WiSe" + return Semester(self._year + value // 2, semester) + @property + def next(self): + return self.offset(1) -if __name__ == "__main__": - print(generateSemesterByDate()) \ No newline at end of file + @property + def previous(self): + return self.offset(-1) \ No newline at end of file