rework semester functions to better generate offsets
This commit is contained in:
@@ -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)
|
||||||
Reference in New Issue
Block a user