Contains functions that take a dictionary {question: answer} and write an Anki
package (.apkg) with a deck containing cards with questions and answers.
The current available card types (models) are:
- basic
- sound
Check the models.py file for all models structure and implementation
create_note
create_note(question, answer, model_type, tags=None)
Create a genanki Note for the given question/answer pair.
Source code in src/anki_deck_from_text/generate_deck.py
| def create_note(
question: str,
answer: str,
model_type: str,
tags: list[str] | None = None,
) -> genanki.Note:
"""Create a genanki Note for the given question/answer pair."""
model = MODELS.get(model_type)
extra_fields = EXTRA_FIELDS.get(model_type)
if model is None:
raise ValueError("model_type does not exist in the current models.")
elif extra_fields:
note = genanki.Note(
model=model,
fields=[question, answer, *extra_fields],
tags=tags or [],
)
else:
note = genanki.Note(
model=model,
fields=[question, answer],
tags=tags or [],
)
return note
|
create_deck
Create a new genanki Deck with a random ID.
Source code in src/anki_deck_from_text/generate_deck.py
| def create_deck(deck_name: str) -> genanki.Deck:
"""Create a new genanki Deck with a random ID."""
deck_id = random.randrange(1 << 30, 1 << 31)
deck = genanki.Deck(
deck_id=deck_id,
name=deck_name,
)
return deck
|
generate_deck
generate_deck(question_answer_dict, deck_name, card_model, tags=None)
Generate a complete deck from a question/answer dictionary.
Source code in src/anki_deck_from_text/generate_deck.py
| def generate_deck(
question_answer_dict: dict[str, str],
deck_name: str,
card_model: str,
tags: list[str] | None = None,
) -> genanki.Deck:
"""Generate a complete deck from a question/answer dictionary."""
deck = create_deck(deck_name=deck_name)
for key, value in question_answer_dict.items():
note = create_note(
question=key,
answer=value,
model_type=card_model,
tags=tags,
)
deck.add_note(note)
return deck
|
write_package
Write the deck to an .apkg file.
Source code in src/anki_deck_from_text/generate_deck.py
| def write_package(deck: genanki.Deck, out: str) -> None:
"""Write the deck to an .apkg file."""
out = out.removesuffix(".apkg")
genanki.Package(deck).write_to_file(f"{out}.apkg")
|