Loading muffin/integrations/schwalbe/__init__.py 0 → 100644 +0 −0 Empty file added. muffin/integrations/schwalbe/studienfachschaften.py 0 → 100644 +39 −0 Original line number Diff line number Diff line from dataclasses import dataclass from collections.abc import Sequence from uuid import UUID from pathlib import Path from typing import Any, Self import requests import json STUDIENFACHSCHAFTEN_JSON_PATH = Path("instance/studienfachschaften.json") @dataclass(frozen=True, eq=True) class Studienfachschaft: uuid: UUID name: str @classmethod def from_dict(cls, d: dict[str, Any]) -> Self: return cls( uuid=UUID(d["uuid"]), name=d["name"] ) def download_studienfachschaften() -> None: """Use the Schwalbe API to download a list of Studienfachschaften and store it in `instance`.""" with open(STUDIENFACHSCHAFTEN_JSON_PATH, "w") as f: json.dump(requests.get("https://schwalbe.stura.uni-heidelberg.de/api/v2/studienfachschaften").json(), f, indent=4, ensure_ascii=False) def get_studienfachschaften(force_download: bool = False) -> Sequence[Studienfachschaft]: if force_download or not STUDIENFACHSCHAFTEN_JSON_PATH.exists(): download_studienfachschaften() with open(STUDIENFACHSCHAFTEN_JSON_PATH) as f: studienfachschaften_json = json.load(f) return [Studienfachschaft.from_dict(d) for d in studienfachschaften_json] Loading
muffin/integrations/schwalbe/studienfachschaften.py 0 → 100644 +39 −0 Original line number Diff line number Diff line from dataclasses import dataclass from collections.abc import Sequence from uuid import UUID from pathlib import Path from typing import Any, Self import requests import json STUDIENFACHSCHAFTEN_JSON_PATH = Path("instance/studienfachschaften.json") @dataclass(frozen=True, eq=True) class Studienfachschaft: uuid: UUID name: str @classmethod def from_dict(cls, d: dict[str, Any]) -> Self: return cls( uuid=UUID(d["uuid"]), name=d["name"] ) def download_studienfachschaften() -> None: """Use the Schwalbe API to download a list of Studienfachschaften and store it in `instance`.""" with open(STUDIENFACHSCHAFTEN_JSON_PATH, "w") as f: json.dump(requests.get("https://schwalbe.stura.uni-heidelberg.de/api/v2/studienfachschaften").json(), f, indent=4, ensure_ascii=False) def get_studienfachschaften(force_download: bool = False) -> Sequence[Studienfachschaft]: if force_download or not STUDIENFACHSCHAFTEN_JSON_PATH.exists(): download_studienfachschaften() with open(STUDIENFACHSCHAFTEN_JSON_PATH) as f: studienfachschaften_json = json.load(f) return [Studienfachschaft.from_dict(d) for d in studienfachschaften_json]