summaryrefslogtreecommitdiffstats
path: root/src/session.py
blob: 33870aa54cf0822a4a3d3770d6bc54e410d435a0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from typing import Iterator, Callable

from card import Card
from scheduler import getSchedulerClass
from parser import parseFiles
from state_json import load, save

class Session:
    def __init__(self, scheduler_name: str, card_files: list[str], state_file: str):
        self._cards = parseFiles(card_files)
        self._state_file = state_file
        self._scheduler = getSchedulerClass(scheduler_name)(self._cards, load(state_file))

    def practice(self, size: int) -> Iterator[Card]:
        ids = self._scheduler.practice(size)
        for id in ids:
            yield self._cards[id]

    def test(self, size: int) -> Iterator[tuple[Card, Callable]]:
        ids = self._scheduler.practice(size)
        results = {}
        
        for id in ids:
            def result(correct: bool) -> None:
                results[id] = int(correct)
            yield self._cards[id], result

        self._scheduler.update(results)
        save(self._state_file, self._scheduler.getState())