diff --git a/anki/collection.py b/anki/collection.py index 4f9a92059..f04ab3eaf 100644 --- a/anki/collection.py +++ b/anki/collection.py @@ -2,12 +2,15 @@ # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +import pprint +import re import time import os import random import stat import datetime import copy +import traceback from anki.lang import _, ngettext from anki.utils import ids2str, fieldChecksum, stripHTML, \ @@ -48,9 +51,12 @@ defaultConf = { # this is initialized by storage.Collection class _Collection(object): + debugLog = False + def __init__(self, db, server=False): self.db = db self.path = db._path + self._openLog() self.log(self.path, anki.version) self.server = server self._lastSave = time.time() @@ -773,4 +779,25 @@ and queue = 0""", intTime(), self.usn()) ########################################################################## def log(self, *args, **kwargs): - runHook("log", args, kwargs) + if not self.debugLog: + return + def customRepr(x): + if isinstance(x, basestring): + return x + return pprint.pformat(x) + path, num, fn, y = traceback.extract_stack( + limit=2+kwargs.get("stack", 0))[0] + buf = u"[%s] %s:%s(): %s" % (intTime(), os.path.basename(path), fn, + ", ".join([customRepr(x) for x in args])) + self._logHnd.write(buf.encode("utf8") + "\n") + if os.environ.get("ANKIDEV"): + print buf + + def _openLog(self): + if not self.debugLog: + return + lpath = re.sub("\.anki2$", ".log", self.path) + self._logHnd = open(lpath, "ab") + + def _closeLog(self): + self._logHnd = None diff --git a/aqt/main.py b/aqt/main.py index 0951d5cab..a8133f561 100644 --- a/aqt/main.py +++ b/aqt/main.py @@ -3,7 +3,6 @@ # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import os -import pprint import sys import re import traceback @@ -32,6 +31,8 @@ class AnkiQt(QMainWindow): self.state = "startup" aqt.mw = self self.app = app + from anki.collection import _Collection + _Collection.debugLog = True if isWin: self._xpstyle = QStyleFactory.create("WindowsXP") self.app.setStyle(self._xpstyle) @@ -268,7 +269,6 @@ To import into a password protected profile, please open the profile before atte def loadCollection(self): self.hideSchemaMsg = True - self._openLog() try: self.col = Collection(self.pm.collectionPath()) except anki.db.Error: @@ -865,7 +865,6 @@ Difference to correct time: %s.""") % diffText def setupHooks(self): addHook("modSchema", self.onSchemaMod) addHook("remNotes", self.onRemNotes) - addHook("log", self.onLog) # Log note deletion ########################################################################## @@ -883,29 +882,6 @@ Difference to correct time: %s.""") % diffText f.write(("\t".join([str(id), str(mid)] + fields)).encode("utf8")) f.write("\n") - # Debug logging - ########################################################################## - - def onLog(self, args, kwargs): - if not self._logHnd: - return - def customRepr(x): - if isinstance(x, basestring): - return x - return pprint.pformat(x) - path, num, fn, y = traceback.extract_stack( - limit=4+kwargs.get("stack", 0))[0] - buf = u"[%s] %s:%s(): %s" % (intTime(), os.path.basename(path), fn, - ", ".join([customRepr(x) for x in args])) - self._logHnd.write(buf.encode("utf8") + "\n") - self._logHnd.flush() - if os.environ.get("ANKIDEV"): - print buf - - def _openLog(self): - lpath = re.sub("\.anki2$", ".log", self.pm.collectionPath()) - self._logHnd = open(lpath, "ab") - # Schema modifications ##########################################################################