예제 #1
0
    def __init__(self, config_filename):
        with open(config_filename, 'r') as f:
            self._config = json.load(f)

        self._tts = ZeusTTS(self._config["tts"])

        self._model = {}
        self._model["default"] = genanki.Model(
            2004387350,
            'zeus model',
            fields=[
                {
                    'name': 'Question'
                },
                {
                    'name': 'Answer'
                },
            ],
            templates=[
                {
                    'name':
                    'Card 1',
                    'qfmt':
                    "<div style='font-size: 30px;text-align: center;'>{{Question}}</div>",
                    'afmt':
                    "<div style='font-size: 30px;text-align: center;'>{{FrontSide}}<hr id='answer'>{{Answer}}</div>",
                },
            ])
        self._model["tts"] = genanki.Model(
            1939171148,
            'zeus tts model',
            fields=[
                {
                    'name': 'Question'
                },
                {
                    'name': 'Answer'
                },
                {
                    'name': 'MyMedia'
                },
            ],
            templates=[
                {
                    'name':
                    'Card 1',
                    'qfmt':
                    "<div style='font-size: 30px;text-align: center;'>{{Question}}<br>{{MyMedia}}</div>",
                    'afmt':
                    "<div style='font-size: 30px;text-align: center;'>{{FrontSide}}<hr id='answer'>{{Answer}}</div>",
                },
            ])
예제 #2
0
    def __generate_model(self):
        if self.with_forvo_link:
            forvo_section = "<hr id='sound'><h3>Произношение:</h3>" \
                + "<a href=\"https://forvo.com/search/{{word}}/en/\">FORVO</a>"

        return genanki.Model(
            self.model_id,
            self.model_name,
            fields=[
                {
                    "name": "word"
                },
                {
                    "name": "translate"
                },
                {
                    "name": "extended"
                },
                {
                    "name": "collocations"
                },
            ],
            templates=[
                {
                    "name":
                    "{{word}}",
                    "qfmt":
                    "<h1>{{word}}</h1>",
                    "afmt":
                    "{{FrontSide}}<hr id='answer'><h3>Перевод:</h3>{{translate}}"
                    + "<hr id='extended'><h3>Примеры:</h3>{{extended}}" +
                    "<hr id='collocations'><h3>Словосочетания:</h3>{{collocations}}"
                    + (forvo_section if self.with_forvo_link else "")
                },
            ])
예제 #3
0
def get_model(css):
    return genanki.Model(
        1487859596,
        'thai_model',
        fields=[
            {
                'name': 'th'
            },
            {
                'name': 'en'
            },
        ],
        templates=[
            {
                'name':
                'th → en',
                'qfmt':
                '<div id="thai">{{th}}</div>',
                'afmt':
                '{{FrontSide}}<hr id="answer"><div id="english">{{en}}</div>',
            },
            {
                'name': 'en → th',
                'qfmt': '<div id="english">{{en}}</div>',
                'afmt':
                '{{FrontSide}}<hr id="answer"><div id="thai">{{th}}</div>',
            },
        ],
        css=css)
예제 #4
0
    def create_deck(self):

        deck = genanki.Deck(2059400110, self.name_entry.get())

        fields = []
        for f in self.columns.keys():  # for each field
            fields.append({'name': f})
        model = genanki.Model(
            1607392319,
            'Word',
            fields=fields,
            templates=[{
                'name':
                'Card 1',
                'qfmt':
                '{{Question}}',
                'afmt':
                '<b>{{FrontSide}}</b>: {{Answer}}<hr id="usage">{{Usage}}'
            }])

        for w in self.parent.words:
            fields = []
            for f in self.columns.keys():  # for each field
                if f == 'Question':
                    fields.append(w)
                else:
                    fields.append(self.parent.words[w][f])
            note = genanki.Note(model=model, fields=fields)
            deck.add_note(note)

        genanki.Package(deck).write_to_file(self.file_entry.get())
예제 #5
0
def test_num_fields_equals_model_ok():
    m = genanki.Model(1894808898,
                      'Test Model',
                      fields=[
                          {
                              'name': 'Question'
                          },
                          {
                              'name': 'Answer'
                          },
                          {
                              'name': 'Extra'
                          },
                      ],
                      templates=[
                          {
                              'name': 'Card 1',
                              'qfmt': '{{Question}}',
                              'afmt':
                              '{{FrontSide}}<hr id="answer">{{Answer}}',
                          },
                      ])

    n = genanki.Note(
        model=m,
        fields=[
            'What is the capital of Taiwan?', 'Taipei',
            'Taipei was originally inhabitied by the Ketagalan people prior to the arrival of Han settlers in 1709.'
        ])

    n.write_to_db(mock.MagicMock(), mock.MagicMock(), mock.MagicMock(),
                  mock.MagicMock())
예제 #6
0
def test_suppress_warnings(recwarn):
    my_model = genanki.Model(1376484377,
                             'Simple Model',
                             fields=[
                                 {
                                     'name': 'Question'
                                 },
                                 {
                                     'name': 'Answer'
                                 },
                             ],
                             templates=[
                                 {
                                     'name':
                                     'Card 1',
                                     'qfmt':
                                     '{{Question}}',
                                     'afmt':
                                     '{{FrontSide}}<hr id="answer">{{Answer}}',
                                 },
                             ])

    my_note = genanki.Note(model=my_model,
                           fields=['Capital of <$> Argentina', 'Buenos Aires'])

    with pytest.warns(None) as warn_recorder:
        warnings.filterwarnings(
            'ignore',
            message='^Field contained the following invalid HTML tags',
            module='genanki')
        my_note.write_to_db(mock.MagicMock(), mock.MagicMock(),
                            mock.MagicMock(), mock.MagicMock())

    assert not warn_recorder
예제 #7
0
def test_num_fields_less_than_model_raises():
    m = genanki.Model(1894808898,
                      'Test Model',
                      fields=[
                          {
                              'name': 'Question'
                          },
                          {
                              'name': 'Answer'
                          },
                          {
                              'name': 'Extra'
                          },
                      ],
                      templates=[
                          {
                              'name': 'Card 1',
                              'qfmt': '{{Question}}',
                              'afmt':
                              '{{FrontSide}}<hr id="answer">{{Answer}}',
                          },
                      ])

    n = genanki.Note(model=m,
                     fields=['What is the capital of Taiwan?', 'Taipei'])

    with pytest.raises(ValueError):
        n.write_to_db(mock.MagicMock(), mock.MagicMock(), mock.MagicMock(),
                      mock.MagicMock())
예제 #8
0
def create_fill_in_the_blank_cards(dictionary, article_text, text_filename):
    global article_deck
    definition_model = genanki.Model(
        1607392320,
        'Simple Model',
        fields=[
            {
                'name': 'Question'
            },
            {
                'name': 'Answer'
            },
        ],
        templates=[{
            'name': 'Card 1',
            'qfmt': '{{Question}}',
            'afmt': '{{FrontSide}}<hr id="answer">{{Answer}}',
        }])

    for word in dictionary:
        if dictionary[word] != 'rejected!' and dictionary[
                word] != 'alt word form used.':
            sentences_with_word = get_words_sentence_from_text(
                dictionary[word][1], article_text, False)
            for sentence in sentences_with_word:
                my_note = genanki.Note(
                    model=definition_model,
                    tags=[text_filename],
                    fields=[
                        sentence + ' (' + str(round(time.time())) + ')',
                        dictionary[word][1]
                    ])
                article_deck.add_note(my_note)
예제 #9
0
    def _genanki_setup(self):
        bh_model = genanki.Model(
            1468421455,  # keep static, generated with random.randrange(1 << 30, 1 << 31) as per genanki docs
            'BH Model',
            fields=[
                {
                    'name': 'Autokennzeichen'
                },
                {
                    'name': 'Name'
                },
            ],
            templates=[{
                'name': 'Kennzeichen -> Name',
                'qfmt': '<h3>{{Autokennzeichen}}</h3>',
                'afmt': '<h4>{{Name}}</h4>',
            }, {
                'name': 'Name -> Kennzeichen',
                'qfmt': '<h4>{{Name}}</h4>',
                'afmt': '<h3>{{Autokennzeichen}}</h3>',
            }])

        self.bh_model = bh_model

        bh_deck = genanki.Deck(1468421456, 'BHs in .at')

        self.bh_deck = bh_deck
예제 #10
0
 def __init__(self, deck_name):
     self.list_of_media_files = []
     self.model_id = Helper.get_random_id()
     self.deck_id = Helper.get_random_id()
     self.model_name = "[email protected] export"
     fields = [
         {'name': 'Word'},
         {'name': 'Image'},
         {'name': 'Sound'},
         {'name': 'Sound_Meaning'},
         {'name': 'Sound_Example'},
         {'name': 'Meaning'},
         {'name': 'Example'},
         {'name': 'IPA'},
         {'name': 'Word_Translation'},
         {'name': 'Meaning_Translation'},
         {'name': 'Example_Translation'},
     ]
     templates = [
         {
             'name': 'Card 1',
             'qfmt': Helper.read_file_to_one_line("anki_templates\\front_template.txt"),
             'afmt': Helper.read_file_to_one_line("anki_templates\\back_template.txt"),
         },
         {
             'name': 'Card 2',
             'qfmt': Helper.read_file_to_one_line("anki_templates\\front_template2.txt"),
             'afmt': Helper.read_file_to_one_line("anki_templates\\back_template2.txt"),
         },
     ]
     css = Helper.read_file_to_one_line("anki_templates\\css_template.txt")
     self.my_model = genanki.Model(self.model_id, self.model_name, fields=fields, templates=templates, css=css)
     self.my_deck = genanki.Deck(self.deck_id, deck_name)
예제 #11
0
 def get_model(self):
     return genanki.Model(
         self.model_id,
         "Dutch Word",
         css=css,
         fields=[
             {
                 "name": "Word"
             },
             {
                 "name": "Part of speech"
             },
             {
                 "name": "Question"
             },
             {
                 "name": "Answer"
             },
         ],
         templates=[
             {
                 "name": "Dutch card",
                 "qfmt": "{{Question}}",
                 "afmt": "{{Answer}}",
             },
         ],
     )
예제 #12
0
    def _model(self) -> genanki.Model:
        """ Wrapper for simple default model """

        fields = [{
            "name": "Verb"
        }, {
            "name": "Translation"
        }, {
            "name": "Question"
        }, {
            "name": "Answer"
        }, {
            "name": "Rule_Pattern"
        }, {
            "name": "Rule_Real"
        }]
        templates = [{
            "name": "Card",
            "qfmt": read(dirname(__file__) + "/front.html"),
            "afmt": read(dirname(__file__) + "/back.html"),
        }]
        style = read(dirname(__file__) + "/style.min.css")

        return genanki.Model(
            20200324,
            "Verbs",
            fields=fields,
            templates=templates,
            css=style,
        )
예제 #13
0
def get_model():
    style = """
    * {
        font-size: 1.1rem;
    }
    h2 {
        font-size: 1.5rem;
    }
    """
    model = genanki.Model(
        1106024768,
        'translated words model',
        fields=[
            {
                'name': 'Question'
            },
            {
                'name': 'Answer'
            },
        ],
        templates=[
            {
                'name': 'Card 1',
                'qfmt': '<h2>{{Question}}</h2>',
                'afmt': '<h2>{{FrontSide}}</h2><hr id="answer">{{Answer}}',
            },
        ],
        css=style)
    return model
예제 #14
0
def makeModel(anki_ID, css='font-size:x-large;'):
    DSKY_model = genanki.Model(
        anki_ID,
        'Desert Sky',
        fields=[
            {
                'name': 'English'
            },
            {
                'name': 'MSA'
            },
            {
                'name': 'MSA_transl'
            },
            {
                'name': 'EGA'
            },
            {
                'name': 'EGA_transl'
            },
        ],
        templates=[
            {
                'name':
                'Card 1',
                'qfmt':
                '{{English}}',
                'afmt':
                '{{FrontSide}}<hr id="answer">MSA: {{MSA}}, {{MSA_transl}} EGA: {{EGA}}, {{EGA_transl}}',
            },
        ])
    return (DSKY_model)
예제 #15
0
def create_model():
    faces_model = genanki.Model(
        1607392318,
        'Faces Model',
        fields=[
            {
                'name': 'Pic'
            },
            {
                'name': 'Name'
            },
            {
                'name': 'Description'
            },
        ],
        templates=[
            {
                'name':
                'Card 1',
                'qfmt':
                '{{Pic}}',
                'afmt':
                '{{FrontSide}}<hr id=answer><b>{{Name}}</b><br><br>{{Description}}',
            },
        ])
    return faces_model
 def __buildGenankiModel(self):
     cssStr = ".card { text-align: center; font-size: 24px; }"
     self.model = genanki.Model(
         1607392219,
         'Simple Model',
         css=cssStr,
         fields=[{
             'name': 'Question'
         }, {
             'name': 'FrontAudio'
         }, {
             'name': 'Answer'
         }, {
             'name': 'BackAudio'
         }],
         templates=[
             {
                 'name':
                 'Card 1',
                 'qfmt':
                 '{{Question}}<br>{{FrontAudio}}',
                 'afmt':
                 '{{FrontSide}}<hr id="answer">{{Answer}}<br>{{BackAudio}}',
             },
         ])
예제 #17
0
def create_definitions_cards(dictionary, text_filename):
    global article_deck
    definition_model = genanki.Model(
        1607392319,
        'Simple Model',
        fields=[
            {
                'name': 'Question'
            },
            {
                'name': 'Answer'
            },
        ],
        templates=[{
            'name': 'Card 1',
            'qfmt': '{{Question}}',
            'afmt': '{{FrontSide}}<hr id="answer">{{Answer}}',
        }, {
            'name': 'Card 2',
            'qfmt': '{{Answer}}',
            'afmt': '{{FrontSide}}<hr id="answer">{{Question}}',
        }])

    for word in dictionary:
        if dictionary[word] != 'rejected!' and dictionary[
                word] != 'alt word form used.':
            my_note = genanki.Note(model=definition_model,
                                   tags=[text_filename],
                                   fields=[
                                       word + ' (' + str(round(time.time())) +
                                       ')', dictionary[word][0]
                                   ])
            article_deck.add_note(my_note)
예제 #18
0
def add_note_anki_deck(deck, q_text, a_text):
    """Adds a note to a genanki deck object.

    Args:
        deck (genanki Deck)
        q_text (string)
        a_text (string)
    """
    # Basic anki note model
    model_id = random.randrange(1 << 30, 1 << 31)
    my_model = genanki.Model(model_id,
                             'Simple Model',
                             fields=[
                                 {
                                     'name': 'Question'
                                 },
                                 {
                                     'name': 'Answer'
                                 },
                             ],
                             templates=[
                                 {
                                     'name':
                                     'Card 1',
                                     'qfmt':
                                     '{{Question}}',
                                     'afmt':
                                     '{{FrontSide}}<hr id="answer">{{Answer}}',
                                 },
                             ])

    my_note = genanki.Note(model=my_model, fields=[q_text, a_text])
    deck.add_note(my_note)
    print(f'Added note: q_text: {q_text}, a_text: {a_text}')
예제 #19
0
def test_num_fields_more_than_model_raises():
    m = genanki.Model(1894808898,
                      'Test Model',
                      fields=[
                          {
                              'name': 'Question'
                          },
                          {
                              'name': 'Answer'
                          },
                      ],
                      templates=[
                          {
                              'name': 'Card 1',
                              'qfmt': '{{Question}}',
                              'afmt':
                              '{{FrontSide}}<hr id="answer">{{Answer}}',
                          },
                      ])

    n = genanki.Note(
        model=m,
        fields=[
            'What is the capital of Taiwan?', 'Taipei',
            'Taipei was originally inhabitied by the Ketagalan people prior to the arrival of Han settlers in 1709.'
        ])

    with pytest.raises(ValueError):
        n.write_to_db(mock.MagicMock(), mock.MagicMock(), mock.MagicMock(),
                      itertools.count(int(time.time() * 1000)))
예제 #20
0
def add_img_note_anki_deck(deck, q_file, a_file):
    """adds an image note to a genanki Deck

    Args:
        deck (genanki Deck)
        q_file (string): Path of question image
        a_file (string): Path of answer image
    """
    model_id = random.randrange(1 << 30, 1 << 31)
    my_model = genanki.Model(
        model_id,
        'Simple Model with Media',
        fields=[
            {
                'name': 'QuestionImage'
            },
            {
                'name': 'AnswerImage'
            },
        ],
        templates=[
            {
                'name': 'Card 1',
                'qfmt': '{{QuestionImage}}',
                'afmt': '{{FrontSide}}<hr id="answer">{{AnswerImage}}',
            },
        ])
    my_note = genanki.Note(
        model=my_model,
        fields=[f"<img src={q_file.name}>", f"<img src={a_file.name}>"])
    deck.add_note(my_note)
    print(f'-Added note with q_img: {q_file.name}, a_img: {a_file.name}')
예제 #21
0
def test_warns_on_invalid_html_tags():
    my_model = genanki.Model(1376484377,
                             'Simple Model',
                             fields=[
                                 {
                                     'name': 'Question'
                                 },
                                 {
                                     'name': 'Answer'
                                 },
                             ],
                             templates=[
                                 {
                                     'name':
                                     'Card 1',
                                     'qfmt':
                                     '{{Question}}',
                                     'afmt':
                                     '{{FrontSide}}<hr id="answer">{{Answer}}',
                                 },
                             ])

    my_note = genanki.Note(model=my_model,
                           fields=['Capital of <$> Argentina', 'Buenos Aires'])

    with pytest.warns(
            UserWarning,
            match='^Field contained the following invalid HTML tags.*$'):
        my_note.write_to_db(mock.MagicMock(), mock.MagicMock(),
                            mock.MagicMock(), mock.MagicMock())
def get_card_model_2():
    with open("style/front.html") as f:
        front = f.read()

    with open("style/back.html") as f:
        back = f.read()

    return genanki.Model(
        1607392319,
        'Simple Model',
        fields=[
            {'name': 'Word'},
            {'name': 'Definition'},
            {'name': 'Sentence'},
            {'name': 'Synonym'},
            {'name': 'Antonym'},
            {'name': 'Part of Speech'},
            {'name': 'Transcription'},
            {'name': 'Source'},
            {'name': 'Picture'},
            {'name': 'Audio'}
        ],
        templates=[
            {
                'name': 'Card 1',
                'qfmt': front,

                'afmt': back,
            },
        ])
예제 #23
0
def test_ok():
    my_model = genanki.Model(1376484377,
                             'Simple Model',
                             fields=[
                                 {
                                     'name': 'Question'
                                 },
                                 {
                                     'name': 'Answer'
                                 },
                             ],
                             templates=[
                                 {
                                     'name':
                                     'Card 1',
                                     'qfmt':
                                     '{{Question}}',
                                     'afmt':
                                     '{{FrontSide}}<hr id="answer">{{Answer}}',
                                 },
                             ])

    my_note = genanki.Note(model=my_model,
                           fields=['Capital of Argentina', 'Buenos Aires'])

    with pytest.warns(None) as warn_recorder:
        my_note.write_to_db(mock.MagicMock(), mock.MagicMock(),
                            mock.MagicMock(), mock.MagicMock())

    # Should be no warnings issued.
    assert not warn_recorder
예제 #24
0
    def as_anki_deck(self):
        model = genanki.Model(
            self.id,
            "{} model".format(self.title),
            fields=[
                {
                    "name": "Question"
                },
                {
                    "name": "Answer"
                },
            ],
            templates=[
                {
                    "name": "Card 1",
                    "qfmt": "{{Question}}",
                    "afmt": '{{FrontSide}}<hr id="answer">{{Answer}}',
                },
            ],
        )

        anki_deck = genanki.Deck(self.id, self.title)

        for card in self.cards:
            note = genanki.Note(model=model,
                                fields=[card.front,
                                        card.render_back()])
            anki_deck.add_note(note)

        return anki_deck
예제 #25
0
def create_deck(words, lang, deckfile):
    name = "Kindle " + lang_names[lang] + " words"
    deck = genanki.Deck(2059400110, name)
    model = genanki.Model(
        1607392319,
        'Word',
        fields=[{
            'name': 'Question'
        }, {
            'name': 'Answer'
        }, {
            'name': 'Usage'
        }],
        templates=[{
            'name':
            'Card 1',
            'qfmt':
            '{{Question}}',
            'afmt':
            '<b>{{FrontSide}}</b>: {{Answer}}<hr id="usage">{{Usage}}'
        }])

    for w in words:
        note = genanki.Note(
            model=model, fields=[w, words[w]['definition'], words[w]['usage']])
        deck.add_note(note)

    genanki.Package(deck).write_to_file(deckfile)
예제 #26
0
def make_model(style):
    m_id = 1395453623
    m_name = 'md2anki simple v1'
    if len(style) > 0:
        m_id = random.randrange(1 << 30, 1 << 31)
        m_name += ' (styled)'
    return genanki.Model(
        m_id,
        m_name,
        fields=[
            {
                'name': 'Question'
            },
            {
                'name': 'Answer'
            },
        ],
        templates=[
            {
                'name':
                'Card 1',
                'qfmt':
                '<article class="markdown-body">{{Question}}</article>',
                'afmt':
                '<article class="markdown-body">{{FrontSide}}</article><hr id="answer"><article class="markdown-body">{{Answer}}</article>',
            },
        ],
        css=style)
예제 #27
0
def getModel():

    MODEL_NAME = "MODEL"

    css = ".card {\
        font-family: arial; \
            font-size: 30px; \
            text-align: center; \
            color: black; \
            background-color: white; \
        }"

    model = genanki.Model(
                getID(MODEL_NAME),
                MODEL_NAME,
                fields=[
                    {"name": "Question"},
                    {"name": "Answer"}
                ],
                templates=[
                    {
                        "name": "Card 1",
                        "qfmt": "<center>{{Question}}</center>",
                        "afmt": "<center>{{FrontSide}}<hr \
                                id=\"answer\">{{Answer}}</center>"
                    }
                ],
                css=css
            )
    return model
예제 #28
0
def createKard(Name, Inhalt):
    my_model = genanki.Model(
        random.randrange(1 << 30, 1 << 31),
        'PythonAutomatedCards',
        fields=[
            {'name': 'Definition'},
            {'name': 'Answer'},
        ],
        templates=[
            {
            'name': 'Card 1',
            'qfmt': '{{Question}}',
            'afmt': '{{FrontSide}}<hr id="answer">{{Answer}}',
            },
    ])
    my_deck = genanki.Deck(random.randrange(1 << 30, 1 << 31), Name)

    for i in Inhalt:
        Header = i['Header']
        Text = i['Text']
        # print(Header + " --> " + Text)

        my_note = genanki.Note(
            model=my_model,
            fields=[Header, Text]
        )
        my_deck.add_note(my_note)
    print("Deck: " + Name + " -> " + str(len(Inhalt)) + " Karten erstellt")
    genanki.Package(my_deck).write_to_file(Name + '.apkg')
    pass
예제 #29
0
def gen_card(deck, front, back):
    my_model = genanki.Model(1607392319,
                             'Simple Model',
                             fields=[
                                 {
                                     'name': 'Question'
                                 },
                                 {
                                     'name': 'Answer'
                                 },
                             ],
                             templates=[
                                 {
                                     'name':
                                     'Card 1',
                                     'qfmt':
                                     '{{Question}}',
                                     'afmt':
                                     '{{FrontSide}}<hr id="answer">{{Answer}}',
                                 },
                             ])

    my_note = genanki.Note(model=my_model, fields=[front, back])

    deck.add_note(my_note)
    return deck
예제 #30
0
def load_chinese_note_model():
    with open(FIELDS_FILE, encoding='utf-8') as fields, open(TEMPLATES_FILE, encoding='utf-8') as templates, \
        open(CSS_FILE, encoding='utf-8') as css, open(SCRIPT_FILE, encoding='utf-8') as script:
        templates_formatted = templates.read()
        templates_formatted = templates_formatted.replace(
            'CHARACTER',
            '{{#Traditional}}<span class="nobr">{{Traditional}}</span>|{{/Traditional}}'
            '<span class="nobr">{{Simplified}}</span>')
        templates_formatted = templates_formatted.replace(
            'PINYIN',
            '{{#Taiwan Pinyin}}{{Taiwan Pinyin}} | {{/Taiwan Pinyin}}{{Pinyin}}'
        )
        script_contents = []
        for i, line in enumerate(script.read().splitlines()):
            if 'BEGIN TESTS' in line:
                break
            if i > 0:
                line = '      ' + line
            script_contents.append(line)
        script_contents.append('      main();')
        script_contents = '\n'.join(script_contents)
        templates_formatted = templates_formatted.replace(
            'SCRIPT', script_contents)
        return genanki.Model(
            CHINESE_NOTE_MODEL_ID,
            'Chinese',
            fields=fields.read(),
            templates=templates_formatted,
            css=css.read(),
        )