Core classes should only init with project class and if needed access main gui via project

This commit is contained in:
Veronica K. B. Olsen
2021-04-25 17:39:52 +02:00
parent 45f726669e
commit 48695651e1
19 changed files with 56 additions and 61 deletions
+2 -2
View File
@@ -38,10 +38,10 @@ logger = logging.getLogger(__name__)
class NWDoc():
def __init__(self, theProject, theParent):
def __init__(self, theProject):
self.theProject = theProject
self.theParent = theParent
self.theParent = theProject.theParent
# Internal Variables
self._theItem = None # The currently open item
+3 -8
View File
@@ -32,7 +32,7 @@ import os
from time import time
from nw.enum import nwItemType, nwItemClass, nwItemLayout, nwAlert
from nw.enum import nwItemType, nwItemClass, nwItemLayout
from nw.common import isHandle, isTitleTag, isItemClass, isItemLayout
from nw.constants import nwFiles, nwKeyWords, nwUnicode
from nw.core.document import NWDoc
@@ -44,12 +44,11 @@ class NWIndex():
H_VALID = ("H0", "H1", "H2", "H3", "H4")
H_LEVEL = {"H0": 0, "H1": 1, "H2": 2, "H3": 3, "H4": 4}
def __init__(self, theProject, theParent):
def __init__(self, theProject):
# Internal
self.mainConf = nw.CONFIG
self.theProject = theProject
self.theParent = theParent
self.indexBroken = False
# Indices
@@ -116,7 +115,7 @@ class NWIndex():
if tItem.itemType != nwItemType.FILE:
return False
theDoc = NWDoc(self.theProject, self.theParent)
theDoc = NWDoc(self.theProject)
theText = theDoc.readDocument(tHandle)
if theText:
self.scanText(tHandle, theText)
@@ -157,10 +156,6 @@ class NWIndex():
logger.error("Failed to load index file")
nw.logException()
self.indexBroken = True
self.theParent.makeAlert(
"Could not load cached index file. Rebuilding index.",
nwAlert.WARN
)
return False
self._tagIndex = theData.get("tagIndex", {})
+2 -2
View File
@@ -266,7 +266,7 @@ class NWProject():
titlePage = "%s%s %s\n" % (titlePage, self.tr("By"), self.getAuthors())
# Document object for writing files
aDoc = NWDoc(self, self.theParent)
aDoc = NWDoc(self)
if popMinimal:
# Creating a minimal project with a few root folders and a
@@ -1393,7 +1393,7 @@ class NWProject():
return
# Handle orphans
aDoc = NWDoc(self, self.theParent)
aDoc = NWDoc(self)
nOrph = 0
noWhere = False
oPrefix = self.tr("Recovered")
+2 -2
View File
@@ -37,8 +37,8 @@ class ToHtml(Tokenizer):
M_EXPORT = 1 # Tweak output for saving to HTML or printing
M_EBOOK = 2 # Tweak output for converting to epub
def __init__(self, theProject, theParent):
Tokenizer.__init__(self, theProject, theParent)
def __init__(self, theProject):
Tokenizer.__init__(self, theProject)
self.genMode = self.M_EXPORT
self.cssStyles = True
+3 -3
View File
@@ -76,10 +76,10 @@ class Tokenizer():
A_Z_TOPMRG = 0x0100 # Zero top margin
A_Z_BTMMRG = 0x0200 # Zero bottom margin
def __init__(self, theProject, theParent):
def __init__(self, theProject):
self.theProject = theProject
self.theParent = theParent
self.theParent = theProject.theParent
# Data Variables
self.theText = "" # The raw text to be tokenized
@@ -284,7 +284,7 @@ class Tokenizer():
self.theText = theText
else:
# Otherwise, load it from file
theDoc = NWDoc(self.theProject, self.theParent)
theDoc = NWDoc(self.theProject)
theText = theDoc.readDocument(theHandle)
if theText:
self.theText = theText
+2 -2
View File
@@ -36,8 +36,8 @@ class ToMarkdown(Tokenizer):
M_STD = 0 # Standard Markdown
M_GH = 1 # GitHub Markdown
def __init__(self, theProject, theParent):
Tokenizer.__init__(self, theProject, theParent)
def __init__(self, theProject):
Tokenizer.__init__(self, theProject)
self.genMode = self.M_STD
self.fullMD = []
+2 -2
View File
@@ -65,8 +65,8 @@ class ToOdt(Tokenizer):
X_BRK = 0x08 # Line break
X_TAB = 0x10 # Tab
def __init__(self, theProject, theParent, isFlat):
Tokenizer.__init__(self, theProject, theParent)
def __init__(self, theProject, isFlat):
Tokenizer.__init__(self, theProject)
self.mainConf = nw.CONFIG
+1 -1
View File
@@ -107,7 +107,7 @@ class GuiDocMerge(QDialog):
)
return
theDoc = NWDoc(self.theProject, self.theParent)
theDoc = NWDoc(self.theProject)
theText = ""
for tHandle in finalOrder:
docText = theDoc.readDocument(tHandle).rstrip("\n")
+2 -2
View File
@@ -127,7 +127,7 @@ class GuiDocSplit(QDialog):
)
return
theDoc = NWDoc(self.theProject, self.theParent)
theDoc = NWDoc(self.theProject)
theText = theDoc.readDocument(self.sourceItem)
if theText is None:
theText = ""
@@ -259,7 +259,7 @@ class GuiDocSplit(QDialog):
return
self.listBox.clear()
theDoc = NWDoc(self.theProject, self.theParent)
theDoc = NWDoc(self.theProject)
theText = theDoc.readDocument(self.sourceItem)
if theText is None:
theText = ""
+1 -1
View File
@@ -75,7 +75,7 @@ class GuiDocEditor(QTextEdit):
self.theTheme = theParent.theTheme
self.theIndex = theParent.theIndex
self.theProject = theParent.theProject
self.nwDocument = NWDoc(self.theProject, self.theParent)
self.nwDocument = NWDoc(self.theProject)
self.docChanged = False # Flag for changed status of document
self.spellCheck = False # Flag for spell checking enabled
+1 -1
View File
@@ -168,7 +168,7 @@ class GuiDocViewer(QTextBrowser):
qApp.setOverrideCursor(QCursor(Qt.WaitCursor))
sPos = self.verticalScrollBar().value()
aDoc = ToHtml(self.theProject, self.theParent)
aDoc = ToHtml(self.theProject)
aDoc.setPreview(self.mainConf.viewComments, self.mainConf.viewSynopsis)
aDoc.setLinkHeaders(True)
+2 -2
View File
@@ -286,7 +286,7 @@ class GuiProjectTree(QTreeWidget):
return True
# This is a new files, so let's add some content
newDoc = NWDoc(self.theProject, self.theParent)
newDoc = NWDoc(self.theProject)
curTxt = newDoc.readDocument(tHandle)
if curTxt is None:
curTxt = ""
@@ -527,7 +527,7 @@ class GuiProjectTree(QTreeWidget):
if self.theParent.docEditor.theHandle == tHandle:
self.theParent.closeDocument()
theDoc = NWDoc(self.theProject, self.theParent)
theDoc = NWDoc(self.theProject)
theDoc.deleteDocument(tHandle)
self.theIndex.deleteHandle(tHandle)
self._deleteTreeItem(tHandle)
+1 -1
View File
@@ -88,7 +88,7 @@ class GuiMain(QMainWindow):
# Core Classes and Settings
self.theTheme = GuiTheme(self)
self.theProject = NWProject(self)
self.theIndex = NWIndex(self.theProject, self)
self.theIndex = NWIndex(self.theProject)
self.hasProject = False
self.isFocusMode = False
self.idleRefTime = time()
+8 -8
View File
@@ -608,7 +608,7 @@ class GuiBuildNovel(QDialog):
# Build Preview
# =============
makeHtml = ToHtml(self.theProject, self.theParent)
makeHtml = ToHtml(self.theProject)
self._doBuild(makeHtml, isPreview=True)
if replaceTabs:
makeHtml.replaceTabs()
@@ -875,7 +875,7 @@ class GuiBuildNovel(QDialog):
wSuccess = False
if theFmt == self.FMT_ODT:
makeOdt = ToOdt(self.theProject, self.theParent, isFlat=False)
makeOdt = ToOdt(self.theProject, isFlat=False)
self._doBuild(makeOdt)
try:
makeOdt.saveOpenDocText(savePath)
@@ -884,7 +884,7 @@ class GuiBuildNovel(QDialog):
errMsg = str(e)
elif theFmt == self.FMT_FODT:
makeOdt = ToOdt(self.theProject, self.theParent, isFlat=True)
makeOdt = ToOdt(self.theProject, isFlat=True)
self._doBuild(makeOdt)
try:
makeOdt.saveFlatXML(savePath)
@@ -893,7 +893,7 @@ class GuiBuildNovel(QDialog):
errMsg = str(e)
elif theFmt == self.FMT_HTM:
makeHtml = ToHtml(self.theProject, self.theParent)
makeHtml = ToHtml(self.theProject)
self._doBuild(makeHtml)
if replaceTabs:
makeHtml.replaceTabs()
@@ -905,7 +905,7 @@ class GuiBuildNovel(QDialog):
errMsg = str(e)
elif theFmt == self.FMT_NWD:
makeNwd = ToMarkdown(self.theProject, self.theParent)
makeNwd = ToMarkdown(self.theProject)
makeNwd.setKeepMarkdown(True)
self._doBuild(makeNwd, doConvert=False)
if replaceTabs:
@@ -918,7 +918,7 @@ class GuiBuildNovel(QDialog):
errMsg = str(e)
elif theFmt in (self.FMT_MD, self.FMT_GH):
makeMd = ToMarkdown(self.theProject, self.theParent)
makeMd = ToMarkdown(self.theProject)
if theFmt == self.FMT_GH:
makeMd.setGitHubMarkdown()
else:
@@ -945,7 +945,7 @@ class GuiBuildNovel(QDialog):
}
if theFmt == self.FMT_JSON_H:
makeHtml = ToHtml(self.theProject, self.theParent)
makeHtml = ToHtml(self.theProject)
self._doBuild(makeHtml)
if replaceTabs:
makeHtml.replaceTabs()
@@ -959,7 +959,7 @@ class GuiBuildNovel(QDialog):
}
elif theFmt == self.FMT_JSON_M:
makeMd = ToHtml(self.theProject, self.theParent)
makeMd = ToHtml(self.theProject)
makeMd.setKeepMarkdown(True)
self._doBuild(makeMd, doConvert=False)
if replaceTabs:
+2 -2
View File
@@ -37,7 +37,7 @@ def testCoreDocument_LoadSave(monkeypatch, dummyGUI, nwMinimal):
assert theProject.openProject(nwMinimal)
assert theProject.projPath == nwMinimal
theDoc = NWDoc(theProject, dummyGUI)
theDoc = NWDoc(theProject)
sHandle = "8c659a11cd429"
# Not a valid handle
@@ -126,7 +126,7 @@ def testCoreDocument_Methods(monkeypatch, dummyGUI, nwMinimal):
assert theProject.openProject(nwMinimal)
assert theProject.projPath == nwMinimal
theDoc = NWDoc(theProject, dummyGUI)
theDoc = NWDoc(theProject)
sHandle = "8c659a11cd429"
docPath = os.path.join(nwMinimal, "content", sHandle+".nwd")
+9 -9
View File
@@ -48,7 +48,7 @@ def testCoreIndex_LoadSave(monkeypatch, nwLipsum, dummyGUI, outDir, refDir):
monkeypatch.setattr("nw.core.index.time", lambda: 123.4)
theIndex = NWIndex(theProject, dummyGUI)
theIndex = NWIndex(theProject)
notIndexable = {
"b3643d0f92e32": False, # Novel ROOT
"45e6b01ca35c1": False, # Chapter One FOLDER
@@ -132,7 +132,7 @@ def testCoreIndex_ScanThis(nwMinimal, dummyGUI):
theProject.projTree.setSeed(42)
assert theProject.openProject(nwMinimal)
theIndex = NWIndex(theProject, dummyGUI)
theIndex = NWIndex(theProject)
isValid, theBits, thePos = theIndex.scanThis("tag: this, and this")
assert not isValid
@@ -183,7 +183,7 @@ def testCoreIndex_CheckThese(nwMinimal, dummyGUI):
theProject.projTree.setSeed(42)
assert theProject.openProject(nwMinimal)
theIndex = NWIndex(theProject, dummyGUI)
theIndex = NWIndex(theProject)
nHandle = theProject.newFile("Hello", nwItemClass.NOVEL, "a508bb932959c")
cHandle = theProject.newFile("Jane", nwItemClass.CHARACTER, "afb3043c7b2b3")
nItem = theProject.projTree[nHandle]
@@ -244,7 +244,7 @@ def testCoreIndex_ScanText(nwMinimal, dummyGUI):
theProject.projTree.setSeed(42)
assert theProject.openProject(nwMinimal)
theIndex = NWIndex(theProject, dummyGUI)
theIndex = NWIndex(theProject)
# Some items for fail to scan tests
dHandle = theProject.newFolder("Folder", nwItemClass.NOVEL, "a508bb932959c")
@@ -449,7 +449,7 @@ def testCoreIndex_ExtractData(nwMinimal, dummyGUI):
theProject.projTree.setSeed(42)
assert theProject.openProject(nwMinimal)
theIndex = NWIndex(theProject, dummyGUI)
theIndex = NWIndex(theProject)
nHandle = theProject.newFile("Hello", nwItemClass.NOVEL, "a508bb932959c")
cHandle = theProject.newFile("Jane", nwItemClass.CHARACTER, "afb3043c7b2b3")
@@ -678,7 +678,7 @@ def testCoreIndex_CheckTagIndex(dummyGUI):
"""Test the tag index checker.
"""
theProject = NWProject(dummyGUI)
theIndex = NWIndex(theProject, dummyGUI)
theIndex = NWIndex(theProject)
# Valid Index
theIndex._tagIndex = {
@@ -742,7 +742,7 @@ def testCoreIndex_CheckRefIndex(dummyGUI):
"""Test the reference index checker.
"""
theProject = NWProject(dummyGUI)
theIndex = NWIndex(theProject, dummyGUI)
theIndex = NWIndex(theProject)
# Valid Index
theIndex._refIndex = {
@@ -864,7 +864,7 @@ def testCoreIndex_CheckNovelNoteIndex(dummyGUI):
"""Test the novel and note index checkers.
"""
theProject = NWProject(dummyGUI)
theIndex = NWIndex(theProject, dummyGUI)
theIndex = NWIndex(theProject)
# Valid Index
theIndex._novelIndex = {
@@ -1122,7 +1122,7 @@ def testCoreIndex_CheckTextCounts(dummyGUI):
"""Test the text counts checker.
"""
theProject = NWProject(dummyGUI)
theIndex = NWIndex(theProject, dummyGUI)
theIndex = NWIndex(theProject)
# Valid Index
theIndex._textCounts = {
+6 -6
View File
@@ -32,8 +32,8 @@ def testCoreToHtml_Format(dummyGUI):
"""Test all the formatters for the ToHtml class.
"""
theProject = NWProject(dummyGUI)
dummyGUI.theIndex = NWIndex(theProject, dummyGUI)
theHtml = ToHtml(theProject, dummyGUI)
dummyGUI.theIndex = NWIndex(theProject)
theHtml = ToHtml(theProject)
# Export Mode
# ===========
@@ -84,8 +84,8 @@ def testCoreToHtml_Convert(dummyGUI):
"""Test the converter of the ToHtml class.
"""
theProject = NWProject(dummyGUI)
dummyGUI.theIndex = NWIndex(theProject, dummyGUI)
theHtml = ToHtml(theProject, dummyGUI)
dummyGUI.theIndex = NWIndex(theProject)
theHtml = ToHtml(theProject)
# Export Mode
# ===========
@@ -348,7 +348,7 @@ def testCoreToHtml_Complex(dummyGUI, fncDir):
"""Test the ave method of the ToHtml class.
"""
theProject = NWProject(dummyGUI)
theHtml = ToHtml(theProject, dummyGUI)
theHtml = ToHtml(theProject)
# Build Project
# =============
@@ -421,7 +421,7 @@ def testCoreToHtml_Methods(dummyGUI):
"""Test all the other methods of the ToHtml class.
"""
theProject = NWProject(dummyGUI)
theHtml = ToHtml(theProject, dummyGUI)
theHtml = ToHtml(theProject)
theHtml.setKeepMarkdown(True)
# Auto-Replace, keep Unicode
+5 -5
View File
@@ -33,7 +33,7 @@ def testCoreToken_Setters(dummyGUI):
"""Test all the setters for the Tokenizer class.
"""
theProject = NWProject(dummyGUI)
theToken = Tokenizer(theProject, dummyGUI)
theToken = Tokenizer(theProject)
# Verify defaults
assert theToken.fmtTitle == "%title%"
@@ -120,7 +120,7 @@ def testCoreToken_TextOps(monkeypatch, nwMinimal, dummyGUI):
theProject.projLang = "en"
theProject._loadProjectLocalisation()
theToken = Tokenizer(theProject, dummyGUI)
theToken = Tokenizer(theProject)
theToken.setKeepMarkdown(True)
assert theProject.openProject(nwMinimal)
@@ -137,7 +137,7 @@ def testCoreToken_TextOps(monkeypatch, nwMinimal, dummyGUI):
)
docTextR = docText.replace("<A>", "this").replace("<B>", "that")
nDoc = NWDoc(theProject, dummyGUI)
nDoc = NWDoc(theProject)
nDoc.readDocument(sHandle)
nDoc.writeDocument(docText)
nDoc.clearDocument()
@@ -200,7 +200,7 @@ def testCoreToken_Tokenize(dummyGUI):
"""Test the tokenization of the Tokenizer class.
"""
theProject = NWProject(dummyGUI)
theToken = Tokenizer(theProject, dummyGUI)
theToken = Tokenizer(theProject)
theToken.setKeepMarkdown(True)
# Header 1
@@ -417,7 +417,7 @@ def testCoreToken_Headers(dummyGUI):
theProject = NWProject(dummyGUI)
theProject.projLang = "en"
theProject._loadProjectLocalisation()
theToken = Tokenizer(theProject, dummyGUI)
theToken = Tokenizer(theProject)
# Nothing
theToken.theText = "Some text ...\n"
+2 -2
View File
@@ -48,8 +48,8 @@ def testCoreToOdt_Convert(dummyGUI):
"""Test the converter of the ToHtml class.
"""
theProject = NWProject(dummyGUI)
dummyGUI.theIndex = NWIndex(theProject, dummyGUI)
theDoc = ToOdt(theProject, dummyGUI, isFlat=True)
dummyGUI.theIndex = NWIndex(theProject)
theDoc = ToOdt(theProject, isFlat=True)
# Export Mode
# ===========