From bda6925bbc37c2460f8fa8c83f168a225698973e Mon Sep 17 00:00:00 2001 From: Jarrett Ye Date: Sun, 6 Aug 2023 13:24:56 +0800 Subject: [PATCH] Feat/filter out cards with specific flags (#15) --- pyproject.toml | 2 +- src/fsrs_optimizer/fsrs_optimizer.py | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 2c9322f..5cb37d0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "FSRS-Optimizer" -version = "4.6.0" +version = "4.7.0" readme = "README.md" dependencies = [ "matplotlib>=3.7.0", diff --git a/src/fsrs_optimizer/fsrs_optimizer.py b/src/fsrs_optimizer/fsrs_optimizer.py index 121cd1b..200ab7e 100644 --- a/src/fsrs_optimizer/fsrs_optimizer.py +++ b/src/fsrs_optimizer/fsrs_optimizer.py @@ -316,7 +316,7 @@ class Optimizer: def __init__(self) -> None: tqdm.pandas() - def anki_extract(self, filename: str, filter_out_suspended_cards: bool = False): + def anki_extract(self, filename: str, filter_out_suspended_cards: bool = False, filter_out_flags: List[int] = []): """Step 1""" # Extract the collection file or deck file to get the .anki21 database. with zipfile.ZipFile(f'{filename}', 'r') as zip_ref: @@ -334,6 +334,10 @@ def anki_extract(self, filename: str, filter_out_suspended_cards: bool = False): else: raise Exception("Collection not exist!") cur = con.cursor() + + def flags2str(flags: List[int]) -> str: + return f"({','.join(map(str, flags))})" + res = cur.execute(f""" SELECT * FROM revlog @@ -342,6 +346,7 @@ def anki_extract(self, filename: str, filter_out_suspended_cards: bool = False): FROM cards WHERE queue != 0 {"AND queue != -1" if filter_out_suspended_cards else ""} + {"AND flags NOT IN %s" % flags2str(filter_out_flags) if len(filter_out_flags) > 0 else ""} ) """ )