Reduce the defacto maximum folder depth from ~200 to a hard 30 and enforce it
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user