rework semester functions to better generate offsets

This commit is contained in:
2025-01-08 13:34:46 +01:00
parent eda556b5ea
commit 598da9bfac

View File

@@ -1,46 +1,88 @@
import datetime 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): _year: int | None = datetime.datetime.now().year
currentYear = datetime.datetime.now().year _semester: str | None = None
currentYear = int(str(currentYear)[-2:]) _month: int | None = datetime.datetime.now().month
month = datetime.datetime.now().month value: str = None
# month = month + 1 logger.debug(f"Got values year:{_year}, semester:{_semester}, month:{_month}")
if next:
month += 1 def __post_init__(self):
if month > 12: logger.debug(
month = 1 f"Got values post_init year:{self._year}, semester:{self._semester}, month:{self._month}"
currentYear += 1 )
if month >= 4 and month <= 9:
return "SoSe " + str(currentYear) if self._year is None:
else: self._year = datetime.datetime.now().year
if month in [10, 11, 12]: if self._month is None:
return f"WiSe {currentYear}/{currentYear+1}" 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: else:
return f"WiSe {currentYear-1}/{currentYear}" self._semester = "SoSe"
@logger.catch
def generateSemesterByOffset(offset): def computeValue(self):
currentYear = datetime.datetime.now().year # year is only last two digits
currentYear = int(str(currentYear)[-2:]) year = str(self._year)[2:]
month = datetime.datetime.now().month year = int(year)
#offset represents a single semester logger.debug(
semester = generateSemesterByDate() f"Year is {year}, month is {self._month}, semester is {self._semester}"
if offset == 1: )
if semester.startswith("SoSe"): if self._semester == "WiSe":
return f"WiSe {currentYear}/{currentYear+1}" if self._month < 4:
valueyear = str(year - 1) + "/" + str(year)
else: else:
return f"SoSe {currentYear+1}" valueyear = str(year)
else: self.value = f"{self._semester} {valueyear}"
#if offset is even, increase the currentyear by offset
if offset % 2 == 0: @logger.catch
if semester.startswith("SoSe"): def offset(self, value: int) -> str:
return f"SoSe {currentYear+offset//2}" """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: 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: 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__": @property
print(generateSemesterByDate()) def previous(self):
return self.offset(-1)