Logger messages (#818)

* Change the way logger messages are generated by using the printf-like method
* Use single quotes around log values that can be empty strings
* Fix bug in log message
This commit is contained in:
Veronica Berglyd Olsen
2021-07-02 10:22:00 +02:00
committed by GitHub
parent 671888b6ea
commit 1b89d0a4f0
20 changed files with 219 additions and 219 deletions
+4 -4
View File
@@ -73,7 +73,7 @@ class NWDoc():
return None
docFile = self._docHandle+".nwd"
logger.debug("Opening document %s" % docFile)
logger.debug("Opening document: %s", docFile)
docPath = os.path.join(self.theProject.projContent, docFile)
self._fileLoc = docPath
@@ -120,7 +120,7 @@ class NWDoc():
self.theProject.ensureFolderStructure()
docFile = self._docHandle+".nwd"
logger.debug("Saving document %s" % docFile)
logger.debug("Saving document: %s", docFile)
docPath = os.path.join(self.theProject.projContent, docFile)
docTemp = os.path.join(self.theProject.projContent, docFile+"~")
@@ -170,7 +170,7 @@ class NWDoc():
if os.path.isfile(chkFile):
try:
os.unlink(chkFile)
logger.debug("Deleted: %s" % chkFile)
logger.debug("Deleted: %s", chkFile)
except Exception as e:
self._docError = str(e)
return False
@@ -237,7 +237,7 @@ class NWDoc():
self._docMeta["layout"] = nwItemLayout[metaBits[1]]
else:
logger.debug("Ignoring meta data: '%s'" % metaLine.strip())
logger.debug("Ignoring meta data: '%s'", metaLine.strip())
return
+12 -12
View File
@@ -85,7 +85,7 @@ class NWIndex():
def deleteHandle(self, tHandle):
"""Delete all entries of a given document handle.
"""
logger.debug("Removing item %s from the index" % tHandle)
logger.debug("Removing item '%s' from the index", tHandle)
delTags = []
for tTag in self._tagIndex:
@@ -107,7 +107,7 @@ class NWIndex():
moved from the archive or trash folders back into the active
project.
"""
logger.debug("Re-indexing item %s" % tHandle)
logger.debug("Re-indexing item '%s'", tHandle)
tItem = self.theProject.projTree[tHandle]
if tItem is None:
@@ -217,7 +217,7 @@ class NWIndex():
self.indexBroken = True
tEnd = time()
logger.debug("Index check took %.3f ms" % ((tEnd - tStart)*1000))
logger.debug("Index check took %.3f ms", (tEnd - tStart)*1000)
logger.debug("Index check complete")
if self.indexBroken:
@@ -239,16 +239,16 @@ class NWIndex():
theRoot = self.theProject.projTree.getRootItem(tHandle)
if theItem is None:
logger.info("Not indexing unknown item %s" % tHandle)
logger.info("Not indexing unknown item '%s'", tHandle)
return False
if theItem.itemType != nwItemType.FILE:
logger.info("Not indexing non-file item %s" % tHandle)
logger.info("Not indexing non-file item '%s'", tHandle)
return False
if theItem.itemLayout == nwItemLayout.NO_LAYOUT:
logger.info("Not indexing no-layout item %s" % tHandle)
logger.info("Not indexing no-layout item '%s'", tHandle)
return False
if theItem.itemParent is None:
logger.info("Not indexing orphaned item %s" % tHandle)
logger.info("Not indexing orphaned item '%s'", tHandle)
return False
# Run word counter for the whole text
@@ -257,16 +257,16 @@ class NWIndex():
# If the file is archived or trashed, we don't index the file itself
if self.theProject.projTree.isTrashRoot(theItem.itemParent):
logger.info("Not indexing trash item %s" % tHandle)
logger.info("Not indexing trash item '%s'", tHandle)
return False
if theRoot.itemClass == nwItemClass.ARCHIVE:
logger.info("Not indexing archived item %s" % tHandle)
logger.info("Not indexing archived item '%s'", tHandle)
return False
itemClass = theItem.itemClass
itemLayout = theItem.itemLayout
logger.debug("Indexing item with handle %s" % tHandle)
logger.debug("Indexing item with handle '%s'", tHandle)
# Check file type, and reset its old index
# Also add a default entry T000000 in case the file has no title
@@ -457,11 +457,11 @@ class NWIndex():
"""
isValid, theBits, _ = self.scanThis(aLine)
if not isValid or len(theBits) < 2:
logger.warning("Skipping keyword with %d value(s) in %s" % (len(theBits), tHandle))
logger.warning("Skipping keyword with %d value(s) in '%s'", len(theBits), tHandle)
return
if theBits[0] not in nwKeyWords.VALID_KEYS:
logger.warning("Skipping invalid keyword '%s' in %s" % (theBits[0], tHandle))
logger.warning("Skipping invalid keyword '%s' in '%s'", theBits[0], tHandle)
return
sTitle = "T%06d" % nTitle
+4 -4
View File
@@ -133,7 +133,7 @@ class NWItem():
# Sliently skip as we may otherwise cause orphaned
# items if an otherwise valid file is opened by a
# version of novelWriter that doesn't know the tag.
logger.error("Unknown tag '%s'" % xValue.tag)
logger.error("Unknown tag '%s'", xValue.tag)
return True
@@ -205,7 +205,7 @@ class NWItem():
elif isItemType(theType):
self.itemType = nwItemType[theType]
else:
logger.error("Unrecognised item type '%s'" % theType)
logger.error("Unrecognised item type '%s'", theType)
self.itemType = nwItemType.NO_TYPE
return
@@ -218,7 +218,7 @@ class NWItem():
elif isItemClass(theClass):
self.itemClass = nwItemClass[theClass]
else:
logger.error("Unrecognised item class '%s'" % theClass)
logger.error("Unrecognised item class '%s'", theClass)
self.itemClass = nwItemClass.NO_CLASS
return
@@ -231,7 +231,7 @@ class NWItem():
elif isItemLayout(theLayout):
self.itemLayout = nwItemLayout[theLayout]
else:
logger.error("Unrecognised item layout '%s'" % theLayout)
logger.error("Unrecognised item layout '%s'", theLayout)
self.itemLayout = nwItemLayout.NO_LAYOUT
return
+2 -2
View File
@@ -174,11 +174,11 @@ class OptionState():
"""Saves a value, with a given group and name.
"""
if setGroup not in self.validMap:
logger.error("Unknown option group '%s'" % setGroup)
logger.error("Unknown option group '%s'", setGroup)
return False
if setName not in self.validMap[setGroup]:
logger.error("Unknown option name '%s'" % setName)
logger.error("Unknown option name '%s'", setName)
return False
if setGroup not in self.theState:
+33 -33
View File
@@ -369,7 +369,7 @@ class NWProject():
self.clearProject()
self.projPath = os.path.abspath(os.path.dirname(fileName))
logger.debug("Opening project: %s" % self.projPath)
logger.debug("Opening project: %s", self.projPath)
# Standard Folders and Files
# ==========================
@@ -385,7 +385,7 @@ class NWProject():
legacyList = [] # Cleanup is done later
for projItem in os.listdir(self.projPath):
logger.verbose("Project contains: %s" % projItem)
logger.verbose("Project contains: %s", projItem)
if projItem.startswith("data_"):
legacyList.append(projItem)
@@ -442,8 +442,8 @@ class NWProject():
hexVersion = xRoot.attrib.get("hexVersion", "0x0")
fileVersion = xRoot.attrib.get("fileVersion", self.tr("Unknown"))
logger.verbose("XML root is %s" % nwxRoot)
logger.verbose("File version is %s" % fileVersion)
logger.verbose("XML root is '%s'", nwxRoot)
logger.verbose("File version is '%s'", fileVersion)
# Check File Type
# ===============
@@ -503,13 +503,13 @@ class NWProject():
if xItem.text is None:
continue
if xItem.tag == "name":
logger.verbose("Working Title: '%s'" % xItem.text)
logger.verbose("Working Title: '%s'", xItem.text)
self.projName = xItem.text
elif xItem.tag == "title":
logger.verbose("Title is '%s'" % xItem.text)
logger.verbose("Title is '%s'", xItem.text)
self.bookTitle = xItem.text
elif xItem.tag == "author":
logger.verbose("Author: '%s'" % xItem.text)
logger.verbose("Author: '%s'", xItem.text)
self.bookAuthors.append(xItem.text)
elif xItem.tag == "saveCount":
self.saveCount = checkInt(xItem.text, 0)
@@ -610,7 +610,7 @@ class NWProject():
if not self.ensureFolderStructure():
return False
logger.debug("Saving project: %s" % self.projPath)
logger.debug("Saving project: %s", self.projPath)
if autoSave:
self.autoCount += 1
@@ -783,7 +783,7 @@ class NWProject():
if not os.path.isdir(baseDir):
try:
os.mkdir(baseDir)
logger.debug("Created folder %s" % baseDir)
logger.debug("Created folder: %s", baseDir)
except Exception as e:
self.theParent.makeAlert([
self.tr("Could not create backup folder."), str(e)
@@ -805,7 +805,7 @@ class NWProject():
self._clearLockFile()
shutil.make_archive(baseName, "zip", self.projPath, ".")
self._writeLockFile()
logger.info("Backup written to: %s" % archName)
logger.info("Backup written to: %s", archName)
if doNotify:
self.theParent.makeAlert(self.tr(
"Backup archive file written to: {0}"
@@ -904,7 +904,7 @@ class NWProject():
if not os.path.isdir(projPath):
try:
os.mkdir(projPath)
logger.debug("Created folder %s" % projPath)
logger.debug("Created folder: %s", projPath)
except Exception as e:
self.theParent.makeAlert([
self.tr("Could not create new project folder."), str(e)
@@ -1162,12 +1162,12 @@ class NWProject():
# Item's parent exists, but hasn't been sent yet, so add
# it again to the end, but make sure this doesn't get
# out hand, so we cap at 10000 items
logger.warning("Item %s found before its parent" % tHandle)
logger.warning("Item '%s' found before its parent", tHandle)
iterItems.append(tHandle)
nMax = min(len(iterItems), 10000)
else:
# Item is orphaned
logger.error("Item %s has no parent in current tree" % tHandle)
logger.error("Item '%s' has no parent in current tree", tHandle)
tItem.setParent(None)
yield tItem
@@ -1221,7 +1221,7 @@ class NWProject():
try:
with open(loadFile, mode="r", encoding="utf8") as inFile:
self.langData = json.load(inFile)
logger.debug("Loaded project language file: %s" % os.path.basename(loadFile))
logger.debug("Loaded project language file: %s", os.path.basename(loadFile))
except Exception:
logger.error("Failed to project language file")
@@ -1299,7 +1299,7 @@ class NWProject():
if not os.path.isdir(thePath):
try:
os.mkdir(thePath)
logger.debug("Created folder %s" % thePath)
logger.debug("Created folder: %s", thePath)
except Exception as e:
self.makeAlert([
self.tr("Could not create folder."), str(e)
@@ -1343,19 +1343,19 @@ class NWProject():
orphanFiles = []
for fileItem in os.listdir(self.projContent):
if not fileItem.endswith(".nwd"):
logger.warning("Skipping file %s" % fileItem)
logger.warning("Skipping file: %s", fileItem)
continue
if len(fileItem) != 17:
logger.warning("Skipping file %s" % fileItem)
logger.warning("Skipping file: %s", fileItem)
continue
fHandle = fileItem[:13]
if not isHandle(fHandle):
logger.warning("Skipping file %s" % fileItem)
logger.warning("Skipping file: %s", fileItem)
continue
if fHandle in self.projTree:
logger.debug("Checking file %s, handle %s: OK" % (fileItem, fHandle))
logger.debug("Checking file %s, handle '%s': OK", fileItem, fHandle)
else:
logger.warning("Checking file %s, handle %s: Orphaned" % (fileItem, fHandle))
logger.warning("Checking file %s, handle '%s': Orphaned", fileItem, fHandle)
orphanFiles.append(fHandle)
# Report status
@@ -1436,7 +1436,7 @@ class NWProject():
sessDiff = self.getSessionWordCount()
sessTime = nowTime - self.projOpened
logger.info("The session lasted %d sec and added %d words" % (int(sessTime), sessDiff))
logger.info("The session lasted %d sec and added %d words", int(sessTime), sessDiff)
if sessTime < 300 and sessDiff == 0:
logger.info("Session too short, skipping log entry")
return False
@@ -1478,7 +1478,7 @@ class NWProject():
errList.append(self.tr("Not a folder: {0}").format(theData))
return errList
logger.info("Old data folder %s found" % theFolder)
logger.info("Old data folder %s found", theFolder)
# Move Documents to Content
# =========================
@@ -1495,20 +1495,20 @@ class NWProject():
newPath = os.path.join(self.projContent, tHandle+".nwd")
try:
os.rename(theFile, newPath)
logger.info("Moved file: %s" % theFile)
logger.info("New location: %s" % newPath)
logger.info("Moved file: %s", theFile)
logger.info("New location: %s", newPath)
except Exception:
errList.append(self.tr("Could not move: {0}").format(theFile))
logger.error("Could not move: %s" % theFile)
logger.error("Could not move: %s", theFile)
nw.logException()
elif len(dataItem) == 21 and dataItem.endswith("_main.bak"):
try:
os.unlink(theFile)
logger.info("Deleted file: %s" % theFile)
logger.info("Deleted file: %s", theFile)
except Exception:
errList.append(self.tr("Could not delete: {0}").format(theFile))
logger.error("Could not delete: %s" % theFile)
logger.error("Could not delete: %s", theFile)
nw.logException()
else:
@@ -1520,10 +1520,10 @@ class NWProject():
# ==================
try:
os.rmdir(theData)
logger.info("Deleted folder: %s" % theFolder)
logger.info("Deleted folder: %s", theFolder)
except Exception:
errList.append(self.tr("Could not delete: {0}").format(theFolder))
logger.error("Could not delete: %s" % theFolder)
logger.error("Could not delete: %s", theFolder)
nw.logException()
return errList
@@ -1541,9 +1541,9 @@ class NWProject():
try:
os.rename(theSrc, theDst)
logger.info("Moved to junk: %s" % theSrc)
logger.info("Moved to junk: %s", theSrc)
except Exception:
logger.error("Could not move item %s to junk." % theSrc)
logger.error("Could not move item %s to junk", theSrc)
nw.logException()
return self.tr("Could not move item {0} to {1}.").format(theSrc, theJunk)
@@ -1574,11 +1574,11 @@ class NWProject():
for rmFile in rmList:
if os.path.isfile(rmFile):
logger.info("Deleting: %s" % rmFile)
logger.info("Deleting: %s", rmFile)
try:
os.unlink(rmFile)
except Exception:
logger.error("Could not delete: %s" % rmFile)
logger.error("Could not delete: %s", rmFile)
nw.logException()
return False
+7 -7
View File
@@ -71,7 +71,7 @@ class NWSpellCheck():
outFile.write("%s\n" % newWord)
self.projDict.append(newWord)
except Exception:
logger.error("Failed to add word to project word list %s" % str(self.projectDict))
logger.error("Failed to add word to project word list %s", str(self.projectDict))
nw.logException()
return False
return True
@@ -111,7 +111,7 @@ class NWSpellCheck():
theLine = theLine.strip()
if len(theLine) > 0 and theLine not in self.projDict:
self.projDict.append(theLine)
logger.debug("Project word list contains %d words" % len(self.projDict))
logger.debug("Project word list contains %d words", len(self.projDict))
except Exception:
logger.error("Failed to load project word list")
@@ -149,10 +149,10 @@ class NWSpellEnchant(NWSpellCheck):
self.theBroker = enchant.Broker()
self.theDict = self.theBroker.request_dict(theLang)
self.spellLanguage = theLang
logger.debug("Enchant spell checking for language %s loaded" % theLang)
logger.debug("Enchant spell checking for language '%s' loaded", theLang)
except Exception:
logger.error("Failed to load enchant spell checking for language %s" % theLang)
logger.error("Failed to load enchant spell checking for language '%s'", theLang)
self.theDict = FakeEnchant()
self.spellLanguage = None
@@ -259,12 +259,12 @@ class NWSpellSimple(NWSpellCheck):
continue
self.theWords.add(theLine.strip().lower())
logger.debug("Spell check dictionary for language %s loaded" % theLang)
logger.debug("Dictionary contains %d words" % len(self.theWords))
logger.debug("Spell check dictionary for language '%s' loaded", theLang)
logger.debug("Dictionary contains %d words", len(self.theWords))
self.spellLanguage = theLang
except Exception:
logger.error("Failed to load spell check word list for language %s" % theLang)
logger.error("Failed to load spell check word list for language '%s'", theLang)
nw.logException()
self.spellLanguage = None
+2 -2
View File
@@ -644,7 +644,7 @@ class ToOdt(Tokenizer):
"""
refStyle = self._mainPara.get(parName, None)
if refStyle is None:
logger.error("Unknown paragraph style '%s'" % parName)
logger.error("Unknown paragraph style '%s'", parName)
return "Standard"
if not refStyle.checkNew(oStyle):
@@ -1295,5 +1295,5 @@ def _mkTag(nsName, tagName):
theNS = XML_NS.get(nsName, "")
if theNS:
return "{%s}%s" % (theNS, tagName)
logger.warning("Missing xml namespace '%s'" % nsName)
logger.warning("Missing xml namespace '%s'", nsName)
return tagName
+14 -13
View File
@@ -111,24 +111,24 @@ class NWTree():
tHandle = self._makeHandle()
if tHandle in self._projTree:
logger.warning("Duplicate handle %s detected, skipping" % tHandle)
logger.warning("Duplicate handle '%s' detected, skipping", tHandle)
return False
logger.verbose("Adding item %s with parent %s" % (str(tHandle), str(pHandle)))
logger.verbose("Adding item '%s' with parent '%s'", str(tHandle), str(pHandle))
nwItem.setHandle(tHandle)
nwItem.setParent(pHandle)
if nwItem.itemType == nwItemType.ROOT:
logger.verbose("Item %s is a root item" % str(tHandle))
logger.verbose("Item '%s' is a root item", str(tHandle))
self._treeRoots.append(tHandle)
if nwItem.itemClass == nwItemClass.ARCHIVE:
logger.verbose("Item %s is the archive folder" % str(tHandle))
logger.verbose("Item '%s' is the archive folder", str(tHandle))
self._archRoot = tHandle
if nwItem.itemType == nwItemType.TRASH:
if self._trashRoot is None:
logger.verbose("Item %s is the trash folder" % str(tHandle))
logger.verbose("Item '%s' is the trash folder", str(tHandle))
self._trashRoot = tHandle
else:
logger.error("Only one trash folder allowed")
@@ -245,9 +245,10 @@ class NWTree():
if iLayout in LAYOUT_MAP:
if hLevel in LAYOUT_MAP[iLayout]:
tItem.itemLayout = LAYOUT_MAP[iLayout][hLevel]
logger.debug("Changed layout for %s from %s to %s" % (
logger.debug(
"Changed layout for %s from %s to %s",
tHandle, iLayout.name, tItem.itemLayout.name
))
)
return True
return False
@@ -357,13 +358,13 @@ class NWTree():
if tHandle in self._projTree:
tmpOrder.append(tHandle)
else:
logger.error("Handle %s in new tree order is not in project tree" % tHandle)
logger.error("Handle '%s' in new tree order is not in project tree", tHandle)
# Do a reverse lookup to check for items that will be lost
# This is mainly for debugging purposes
for tHandle in self._treeOrder:
if tHandle not in tmpOrder:
logger.warning("Handle %s in old tree order is not in new tree order" % tHandle)
logger.warning("Handle '%s' in old tree order is not in new tree order", tHandle)
# Save the temp list
self._treeOrder = tmpOrder
@@ -387,7 +388,7 @@ class NWTree():
if tItem is None:
return False
if tItem.itemType != nwItemType.FILE:
logger.error("Item %s is not a file" % tHandle)
logger.error("Item %s is not a file", tHandle)
return False
if not isinstance(itemLayout, nwItemLayout):
return False
@@ -444,7 +445,7 @@ class NWTree():
"""
if tHandle in self._projTree:
return self._projTree[tHandle]
logger.error("No tree item with handle %s" % str(tHandle))
logger.error("No tree item with handle '%s'", str(tHandle))
return None
def __delitem__(self, tHandle):
@@ -454,7 +455,7 @@ class NWTree():
self._treeOrder.remove(tHandle)
del self._projTree[tHandle]
else:
logger.warning("Failed to delete item %s: item not found" % tHandle)
logger.warning("Failed to delete item '%s': item not found", tHandle)
return
if tHandle in self._treeRoots:
@@ -523,7 +524,7 @@ class NWTree():
newSeed = str(self._handleSeed)
self._handleSeed += 1
logger.verbose("Generating handle with seed '%s'" % newSeed)
logger.verbose("Generating handle with seed '%s'", newSeed)
itemHandle = sha256(newSeed.encode()).hexdigest()[0:13]
if itemHandle in self._projTree:
logger.warning("Duplicate handle encountered! Retrying ...")