Add another model and new types of notes into same storage!
authorOleksandr Gavenko <gavenkoa@gmail.com>
Sat, 12 Nov 2016 00:19:34 +0200
changeset 669 82da364db365
parent 668 e22ffba8ecc0
child 670 b86e70406247
Add another model and new types of notes into same storage!
obsolete/exp_anki.py
--- a/obsolete/exp_anki.py	Fri Nov 11 23:24:49 2016 +0200
+++ b/obsolete/exp_anki.py	Sat Nov 12 00:19:34 2016 +0200
@@ -1,7 +1,10 @@
+# -*- coding: utf-8 -*-
+
 import sys
 import os
 import tempfile
 import shutil
+import traceback
 
 FONAME = "test.apkg"
 
@@ -13,11 +16,15 @@
 CWD = os.getcwd()
 TMPDIR = tempfile.mkdtemp(dir = os.path.dirname(FONAME))
 
-def cleanup(type_, ex, traceback):
+def cleanup():
     os.chdir(CWD)
     shutil.rmtree(TMPDIR)
 
-sys.excepthook = cleanup
+def exception_handler(etype, ex, tb):
+    cleanup()
+    traceback.print_exception(etype, ex, tb)
+
+sys.excepthook = exception_handler
 
 sys.path.append('/usr/share/anki')
 import anki
@@ -50,21 +57,20 @@
 """
 
 collection.models.addField(model, collection.models.newField('en'))
-collection.models.addField(model, collection.models.newField('tr'))
+collection.models.addField(model, collection.models.newField('ru'))
 
-tmpl = collection.models.newTemplate('en -> tr')
+tmpl = collection.models.newTemplate('en -> ru')
 tmpl['qfmt'] = '<div class="from">{{en}}</div>'
-tmpl['afmt'] = '{{FrontSide}}\n\n<hr id=answer>\n\n{{tr}}'
+tmpl['afmt'] = '{{FrontSide}}\n\n<hr id=answer>\n\n{{ru}}'
 collection.models.addTemplate(model, tmpl)
-tmpl = collection.models.newTemplate('tr -> en')
-tmpl['qfmt'] = '{{tr}}'
+tmpl = collection.models.newTemplate('ru -> en')
+tmpl['qfmt'] = '{{ru}}'
 tmpl['afmt'] = '{{FrontSide}}\n\n<hr id=answer>\n\n<div class="from">{{en}}</div>'
 collection.models.addTemplate(model, tmpl)
 
-
-print(dir(model))
-print(type(model))
-print(model)
+# print(dir(model))
+# print(type(model))
+# print(model)
 # Equivalent of:
 # collection.models.add(model)
 # without setting auto-generated ID:
@@ -76,27 +82,85 @@
 # collection.decks.select(deck_id)
 
 note = anki.notes.Note(collection, model)
-print(dir(note))
-print(type(note))
-print(note._fmap)
-print(note)
+# print(dir(note))
+# print(type(note))
+# print(note._fmap)
+# print(note)
 
 
 note['en'] = "hello"
-note['tr'] = u"[heləʊ]\nint. привет"
-note.guid = "xxx1"
+note['ru'] = u"[heləʊ]\nint. привет"
+note.guid = "enru_1"
 collection.addNote(note)
-print(dir(note))
+# print(dir(note))
 
 note = collection.newNote()
 note['en'] = "bye"
-note['tr'] = u"[baɪ]\nint. пока"
-note.guid = "xxx2"
+note['ru'] = u"[baɪ]\nint. пока"
+note.guid = "enru_2"
 collection.addNote(note)
 
 # model.add(deck)
 # model.save()
 
+################################################################
+# Add another model and new types of notes into same storage!
+model_irrverb = collection.models.new(FBASENAME + "_model_irrverb")
+model_irrverb['tags'].append(FBASENAME + "_tag_irrverb")
+model_irrverb['did'] = deck_id
+model_irrverb['css'] = """
+.card {
+  font-family: arial;
+  font-size: 20px;
+  text-align: center;
+  color: black;
+  background-color: white;
+}
+.v1 { color: red; }
+.v2 { color: green; }
+.v3 { color: blue; }
+"""
+
+collection.models.addField(model_irrverb, collection.models.newField('v1'))
+collection.models.addField(model_irrverb, collection.models.newField('v2'))
+collection.models.addField(model_irrverb, collection.models.newField('v3'))
+
+ANSWER_MSG = '{{FrontSide}}<hr id=answer>{{v1}}\n{{v2}}\n{{v3}}'
+tmpl = collection.models.newTemplate('v1')
+tmpl['qfmt'] = '<div class="v1">{{v1}}</div>'
+tmpl['afmt'] = ANSWER_MSG
+collection.models.addTemplate(model_irrverb, tmpl)
+
+tmpl = collection.models.newTemplate('v2')
+tmpl['qfmt'] = '<div class="v2">{{v2}}</div>'
+tmpl['afmt'] = ANSWER_MSG
+collection.models.addTemplate(model_irrverb, tmpl)
+tmpl = collection.models.newTemplate('v3')
+tmpl['qfmt'] = '<div class="v3">{{v3}}</div>'
+tmpl['afmt'] = ANSWER_MSG
+collection.models.addTemplate(model_irrverb, tmpl)
+
+# We mustn't define 'id' before adding tmpl because addTemplate() fail because
+# it tries to update DB but we have no DB entry yet...
+model_irrverb['id'] = 12345678+1  # essential for upgrade detection
+collection.models.update(model_irrverb)
+collection.models.setCurrent(model_irrverb)
+collection.models.save(model_irrverb)
+
+note = anki.notes.Note(collection, model_irrverb)
+note['v1'] = "go"
+note['v2'] = "went"
+note['v3'] = "gone"
+note.guid = "irrverb_1"
+collection.addNote(note)
+
+note = anki.notes.Note(collection, model_irrverb)
+note['v1'] = "drive"
+note['v2'] = "drove"
+note['v3'] = "driven"
+note.guid = "irrverb_2"
+collection.addNote(note)
+
 export = AnkiPackageExporter(collection)
 try:
     os.remove(FONAME)