cards/notes

This commit is contained in:
Damien Elmes 2019-12-19 14:14:20 +10:00
parent 9c16d59086
commit 912e1bad03
2 changed files with 16 additions and 14 deletions

View file

@ -22,8 +22,9 @@ from typing import Any, Optional
class Card: class Card:
def __init__(self, col, id=None) -> None: def __init__(self, col, id: Optional[int] = None) -> None:
self.col = col from anki.collection import _Collection
self.col: _Collection = col
self.timerStarted = None self.timerStarted = None
self._qa = None self._qa = None
self._note = None self._note = None
@ -117,7 +118,7 @@ lapses=?, left=?, odue=?, odid=?, did=? where id = ?""",
self.left, self.odue, self.odid, self.did, self.id) self.left, self.odue, self.odid, self.did, self.id)
self.col.log(self) self.col.log(self)
def q(self, reload=False, browser=False) -> str: def q(self, reload: bool = False, browser: bool = False) -> str:
return self.css() + self._getQA(reload, browser)['q'] return self.css() + self._getQA(reload, browser)['q']
def a(self) -> str: def a(self) -> str:
@ -126,7 +127,7 @@ lapses=?, left=?, odue=?, odid=?, did=? where id = ?""",
def css(self) -> str: def css(self) -> str:
return "<style>%s</style>" % self.model()['css'] return "<style>%s</style>" % self.model()['css']
def _getQA(self, reload=False, browser=False) -> Any: def _getQA(self, reload: bool = False, browser: bool = False) -> Any:
if not self._qa or reload: if not self._qa or reload:
f = self.note(reload); m = self.model(); t = self.template() f = self.note(reload); m = self.model(); t = self.template()
data = [self.id, f.id, m['id'], self.odid or self.did, self.ord, data = [self.id, f.id, m['id'], self.odid or self.did, self.ord,
@ -138,7 +139,7 @@ lapses=?, left=?, odue=?, odid=?, did=? where id = ?""",
self._qa = self.col._renderQA(data, *args) self._qa = self.col._renderQA(data, *args)
return self._qa return self._qa
def note(self, reload=False) -> Any: def note(self, reload: bool = False) -> Any:
if not self._note or reload: if not self._note or reload:
self._note = self.col.getNote(self.nid) self._note = self.col.getNote(self.nid)
return self._note return self._note
@ -188,6 +189,6 @@ lapses=?, left=?, odue=?, odid=?, did=? where id = ?""",
def userFlag(self) -> Any: def userFlag(self) -> Any:
return self.flags & 0b111 return self.flags & 0b111
def setUserFlag(self, flag) -> None: def setUserFlag(self, flag: int) -> None:
assert 0 <= flag <= 7 assert 0 <= flag <= 7
self.flags = (self.flags & ~0b111) | flag self.flags = (self.flags & ~0b111) | flag

View file

@ -4,11 +4,12 @@
from anki.utils import fieldChecksum, intTime, \ from anki.utils import fieldChecksum, intTime, \
joinFields, splitFields, stripHTMLMedia, timestampID, guid64 joinFields, splitFields, stripHTMLMedia, timestampID, guid64
from typing import Any, List, Tuple from typing import List, Tuple
from typing import Any, Optional
class Note: class Note:
def __init__(self, col, model=None, id=None) -> None: def __init__(self, col, model: Optional[Any] = None, id: Optional[int] = None) -> None:
assert not (model and id) assert not (model and id)
self.col = col self.col = col
self.newlyAdded = False self.newlyAdded = False
@ -44,7 +45,7 @@ from notes where id = ?""", self.id)
self._fmap = self.col.models.fieldMap(self._model) self._fmap = self.col.models.fieldMap(self._model)
self.scm = self.col.scm self.scm = self.col.scm
def flush(self, mod=None) -> None: def flush(self, mod: Optional[int] = None) -> None:
"If fields or tags have changed, write changes to disk." "If fields or tags have changed, write changes to disk."
assert self.scm == self.col.scm assert self.scm == self.col.scm
self._preFlush() self._preFlush()
@ -90,16 +91,16 @@ insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?)""",
return [(f['name'], self.fields[ord]) return [(f['name'], self.fields[ord])
for ord, f in sorted(self._fmap.values())] for ord, f in sorted(self._fmap.values())]
def _fieldOrd(self, key) -> Any: def _fieldOrd(self, key: str) -> Any:
try: try:
return self._fmap[key][0] return self._fmap[key][0]
except: except:
raise KeyError(key) raise KeyError(key)
def __getitem__(self, key) -> Any: def __getitem__(self, key: str) -> Any:
return self.fields[self._fieldOrd(key)] return self.fields[self._fieldOrd(key)]
def __setitem__(self, key, value) -> None: def __setitem__(self, key: str, value: str) -> None:
self.fields[self._fieldOrd(key)] = value self.fields[self._fieldOrd(key)] = value
def __contains__(self, key) -> bool: def __contains__(self, key) -> bool:
@ -108,7 +109,7 @@ insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?)""",
# Tags # Tags
################################################## ##################################################
def hasTag(self, tag) -> Any: def hasTag(self, tag: str) -> Any:
return self.col.tags.inList(tag, self.tags) return self.col.tags.inList(tag, self.tags)
def stringTags(self) -> Any: def stringTags(self) -> Any:
@ -125,7 +126,7 @@ insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?)""",
for r in rem: for r in rem:
self.tags.remove(r) self.tags.remove(r)
def addTag(self, tag) -> None: def addTag(self, tag: str) -> None:
# duplicates will be stripped on save # duplicates will be stripped on save
self.tags.append(tag) self.tags.append(tag)