diff --git a/backend/lesson_info.py b/backend/lesson_info.py index 2a4e085..a12b3be 100644 --- a/backend/lesson_info.py +++ b/backend/lesson_info.py @@ -17,10 +17,14 @@ class _InfoParsers: _teacher = fr"(?:{_teacher_name})|(?:{_teacher_abbreviation})" # teacher a,teacher b - _teachers = fr"{_teacher}(?:,{_teacher})*" + _teachers = fr"{_teacher}(?:, ?{_teacher})*" _course = r"[A-Za-z0-9ÄÖÜäöüß-]{2,7}" # maybe be more strict? _period = r"St\.(?P(?P\d{1,2})(?:-(?P\d{1,2}))?)" _periods = fr"" + _form = ( + r"(((?P(\d+)|([A-Za-zÄÖÜäöüß]+))(?P[^A-Za-zÄÖÜäöüß0-9]?) ?(?P(\d+)|([A-Za-zÄÖÜäöüß]+?)))|" + r"(?P([A-Za-zÄÖÜäöüß]+)|(\d+)))" + ) _weekday = r"(?:Mo|Di|Mi|Do|Fr|Sa|So)" _date = r"(?:\d{2}\.\d{2}\.)" @@ -70,6 +74,7 @@ class _InfoParsers: do_where = re.compile(rf'bitte(( \w+)+) bearbeiten') # 1. group: where # gesamte Klasse 6/2 + whole_form = re.compile(rf'gesamte Klasse (?P
{_form})') # individuelle Nachbearbeitung des aktuellen Stoffes in der Bibo bzw. 10/1 zu Hause individual_revision = re.compile(rf'individuelle Nachbearbeitung des aktuellen Stoffes (?Pin der Bibo)?') @@ -219,6 +224,11 @@ class Exam(ToJsonMixin): last_name: str +@dataclasses.dataclass +class WholeForm(ToJsonMixin): + form: str + + def _parse_info(info: str, plan_year: int) -> ToJsonMixin | None: if match := _InfoParsers.substitution.search(info): return InsteadOfCourse(match.group("course"), match.group("teachers").split(",")) @@ -258,6 +268,8 @@ def _parse_info(info: str, plan_year: int) -> ToJsonMixin | None: return DoAtLocation(match.group(1).strip()) elif match := _InfoParsers.individual_revision.search(info): return IndividualRevision(match.groupdict(None)["location"]) + elif match := _InfoParsers.whole_form.search(info): + return WholeForm(match.group("form").replace(" ", "")) elif _InfoParsers.independent.search(info): return DoIndependent() elif _InfoParsers.tasks_in_lernsax.search(info): diff --git a/backend/load_plans.py b/backend/load_plans.py index 142a9da..86d5993 100644 --- a/backend/load_plans.py +++ b/backend/load_plans.py @@ -22,7 +22,7 @@ class PlanCrawler: """Check for new indiware plans in regular intervals and cache them along with their extracted and parsed (meta)data.""" - VERSION = "21" + VERSION = "22" def __init__(self, client: Stundenplan24Client, cache: Cache): self.client = client