Files
SemesterapparatsManager/src/logic/c_sort.py
WorldTeacher 0406fe4f6f Refactor and enhance type hints across multiple modules
- Updated the `from_tuple` method in `Prof` class to specify return type.
- Added type hints for various methods in `LehmannsClient`, `OpenAI`, `WebRequest`, and `ZoteroController` classes to improve code clarity and type safety.
- Modified `pdf_to_csv` function to return a string instead of a DataFrame.
- Enhanced error handling and type hints in `wordparser` and `xmlparser` modules.
- Removed unused UI file `Ui_medianadder.ts`.
- Improved the layout and structure of the `semesterapparat_ui` to enhance user experience.
- Updated file picker to support `.doc` files in addition to `.docx`.
- Added unique item handling in `Ui` class to prevent duplicates in apparat list.
- General code cleanup and consistency improvements across various files.
2025-10-21 09:09:54 +02:00

72 lines
1.9 KiB
Python

def parse_semester(semester: str) -> tuple[int, int]:
"""
Parses the semester string into a sortable format.
Returns a tuple of (year, type), where type is 0 for SoSe and 1 for WiSe.
"""
if semester.startswith("SoSe"):
return int(semester.split()[1]), 0
elif semester.startswith("WiSe"):
year_part = semester.split()[1]
if "/" in year_part:
start_year, _ = map(int, year_part.split("/"))
else:
start_year = int(year_part)
return start_year, 1
else:
raise ValueError(f"Invalid semester format: {semester}")
def custom_sort(entries) -> list:
"""
Sorts the list of tuples based on the custom schema.
:param entries: List of tuples in the format (str, int, int).
:return: Sorted list of tuples.
"""
return sorted(
entries,
key=lambda entry: (
parse_semester(entry[0]), # Sort by semester parsed as (year, type)
entry[1], # Then by the second element of the tuple
entry[2], # Finally by the third element of the tuple
),
)
def sort_semesters_list(semesters: list) -> list:
"""
Sorts a list of semester strings based on year and type.
:param semesters: List of semester strings (e.g., "SoSe 24", "WiSe 22/23").
:return: Sorted list of semester strings.
"""
return sorted(semesters, key=parse_semester)
if __name__ == "__main__":
unsorted = [
"SoSe 24",
"WiSe 22/23",
"WiSe 23/24",
"WiSe 20/21",
"SoSe 23",
"SoSe 20",
"WiSe 7/8",
"WiSe 14/15",
"WiSe 13/14",
"SoSe 8",
"WiSe 19/20",
"WiSe 12/13",
"WiSe 21/22",
"WiSe 18/19",
"WiSe 11/12",
"WiSe 9/10",
"WiSe 6/7",
"SoSe 7",
"WiSe 16/17",
"WiSe 24/25",
"SoSe 25",
]
# print(sort_semesters_list(unsorted))