From 5dfe95aa67a77aa2b68f94cb04d5b93ec4fbfe3e Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Mon, 4 Nov 2013 23:03:33 +0900 Subject: [PATCH] move debug logging into libanki we want to be able to log the initial automatic sync, which happens before the debug logging was set up in ankiqt also skip the flush, as it should eventually get written --- anki/collection.py | 29 ++++++++++++++++++++++++++++- aqt/main.py | 28 ++-------------------------- 2 files changed, 30 insertions(+), 27 deletions(-) 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 ##########################################################################