Verified Commit ac335533 authored by Jakob Moser's avatar Jakob Moser
Browse files

Add downloader for Studienfachschaften

parent a58bb0e1
Loading
Loading
Loading
Loading
+0 −0

Empty file added.

+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]