Reduce the defacto maximum folder depth from ~200 to a hard 30 and enforce it

This commit is contained in:
Veronica K. B. Olsen
2020-08-16 21:55:36 +02:00
parent 850ac2b2f3
commit 619810544a
4 changed files with 24 additions and 10 deletions
+2
View File
@@ -33,6 +33,8 @@ class nwConst():
fStampFmt = "%Y-%m-%d %H.%M.%S" # FileName safe format fStampFmt = "%Y-%m-%d %H.%M.%S" # FileName safe format
dStampFmt = "%Y-%m-%d" # Date only format dStampFmt = "%Y-%m-%d" # Date only format
maxDepth = 30 # Maximum folder depth of a project
# END Class nwConst # END Class nwConst
class nwRegEx(): class nwRegEx():
+2 -2
View File
@@ -33,7 +33,7 @@ from os import path, rename, unlink
from nw.core.item import NWItem from nw.core.item import NWItem
from nw.constants import nwAlert from nw.constants import nwAlert
from nw.common import isHandle from nw.common import isHandle
from nw.constants import nwItemLayout, nwItemClass from nw.constants import nwItemLayout, nwItemClass, nwConst
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -213,7 +213,7 @@ class NWDoc():
# Scan for handles # Scan for handles
thePath = [] thePath = []
for n in range(200): for n in range(nwConst.maxDepth + 5):
if len(theMeta) < 14: if len(theMeta) < 14:
break break
if theMeta[13] == ":": if theMeta[13] == ":":
+5 -5
View File
@@ -35,7 +35,7 @@ from time import time
from nw.core.item import NWItem from nw.core.item import NWItem
from nw.common import checkString from nw.common import checkString
from nw.constants import nwFiles, nwItemType, nwItemClass, nwItemLayout from nw.constants import nwFiles, nwItemType, nwItemClass, nwItemLayout, nwConst
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -251,11 +251,11 @@ class NWTree():
def getRootItem(self, tHandle): def getRootItem(self, tHandle):
"""Iterate upwards in the tree until we find the item with """Iterate upwards in the tree until we find the item with
parent None, the root item. We do this with a for loop with a parent None, the root item. We do this with a for loop with a
maximum depth of 200 to make infinite loops impossible. maximum depth to make infinite loops impossible.
""" """
tItem = self.__getitem__(tHandle) tItem = self.__getitem__(tHandle)
if tItem is not None: if tItem is not None:
for i in range(200): for i in range(nwConst.maxDepth + 1):
if tItem.parHandle is None: if tItem.parHandle is None:
return tItem return tItem
else: else:
@@ -266,14 +266,14 @@ class NWTree():
def getItemPath(self, tHandle): def getItemPath(self, tHandle):
"""Iterate upwards in the tree until we find the item with """Iterate upwards in the tree until we find the item with
parent None, the root item, and return the list of handles. parent None, the root item, and return the list of handles.
We do this with a for loop with a maximum depth of 200 to make We do this with a for loop with a maximum depth to make
infinite loops impossible. infinite loops impossible.
""" """
tTree = [] tTree = []
tItem = self.__getitem__(tHandle) tItem = self.__getitem__(tHandle)
if tItem is not None: if tItem is not None:
tTree.append(tHandle) tTree.append(tHandle)
for i in range(200): for i in range(nwConst.maxDepth + 1):
if tItem.parHandle is None: if tItem.parHandle is None:
return tTree return tTree
else: else:
+15 -3
View File
@@ -38,7 +38,7 @@ from PyQt5.QtWidgets import (
from nw.core import NWDoc from nw.core import NWDoc
from nw.constants import ( from nw.constants import (
nwLabels, nwItemType, nwItemClass, nwItemLayout, nwAlert nwLabels, nwItemType, nwItemClass, nwItemLayout, nwAlert, nwConst
) )
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -119,7 +119,6 @@ class GuiProjectTree(QTreeWidget):
# Internal Mapping # Internal Mapping
self.makeAlert = self.theParent.makeAlert self.makeAlert = self.theParent.makeAlert
self.theParent.editItem()
return return
@@ -215,17 +214,30 @@ class GuiProjectTree(QTreeWidget):
) )
return False return False
parTree = self.theProject.projTree.getItemPath(pHandle)
# If we're still here, add the file or folder # If we're still here, add the file or folder
if itemType == nwItemType.FILE: if itemType == nwItemType.FILE:
tHandle = self.theProject.newFile("New File", itemClass, pHandle) tHandle = self.theProject.newFile("New File", itemClass, pHandle)
elif itemType == nwItemType.FOLDER: elif itemType == nwItemType.FOLDER:
if len(parTree) >= nwConst.maxDepth - 1:
# Folders cannot be deeper than maxDepth - 1, leaving room
# for one more level of files.
self.makeAlert((
"Cannot add new folder to this item. "
"Maximum folder depth has been reached."
), nwAlert.ERROR)
return False
tHandle = self.theProject.newFolder("New Folder", itemClass, pHandle) tHandle = self.theProject.newFolder("New Folder", itemClass, pHandle)
else: else:
logger.error("Failed to add new item") logger.error("Failed to add new item")
return False return False
# Add the new item to the tree # Add the new item to the tree
self.revealTreeItem(tHandle, nHandle) self.revealTreeItem(tHandle, nHandle)
self.theParent.editItem()
return True return True
@@ -541,7 +553,7 @@ class GuiProjectTree(QTreeWidget):
pCount += int(pItem.child(i).text(self.C_COUNT)) pCount += int(pItem.child(i).text(self.C_COUNT))
pHandle = pItem.data(self.C_NAME, Qt.UserRole) pHandle = pItem.data(self.C_NAME, Qt.UserRole)
if not nDepth > 200 and pHandle != "": if not nDepth > nwConst.maxDepth + 1 and pHandle != "":
self.propagateCount(pHandle, pCount, nDepth+1) self.propagateCount(pHandle, pCount, nDepth+1)
return return