fix-39
deadc0de6 9 months ago
parent b0572bf119
commit e2be5136d4

@ -14,7 +14,8 @@ import anytree # type: ignore
# local imports
from catcli import nodes
from catcli.nodes import NodeAny, NodeStorage, \
NodeTop, NodeFile, NodeArchived, NodeDir, NodeMeta
NodeTop, NodeFile, NodeArchived, NodeDir, NodeMeta, \
typcast_node
from catcli.utils import size_to_str, epoch_to_str, md5sum, fix_badchars
from catcli.logger import Logger
from catcli.nodeprinter import NodePrinter
@ -86,7 +87,8 @@ class Noder:
try:
bpath = os.path.basename(path)
the_node = resolv.get(top, bpath)
return cast(NodeAny, the_node)
node = typcast_node(the_node)
return cast(NodeAny, node)
except anytree.resolver.ChildResolverError:
if not quiet:
Logger.err(f'No node at path \"{bpath}\"')
@ -296,6 +298,7 @@ class Noder:
"""remove any node not flagged and clean flags"""
cnt = 0
for node in anytree.PreOrderIter(top):
node = typcast_node(node)
if node.type not in [nodes.TYPE_DIR, nodes.TYPE_FILE]:
continue
if self._clean(node):

@ -21,6 +21,50 @@ NAME_TOP = 'top'
NAME_META = 'meta'
def typcast_node(node: Any) -> Any:
"""typecast node to its sub type"""
if node.type == TYPE_TOP:
return NodeTop(node.name, node.children)
if node.type == TYPE_FILE:
return NodeFile(node.name,
node.relpath,
node.nodesize,
node.md5,
node.maccess,
node.parent,
node.children)
if node.type == TYPE_DIR:
return NodeDir(node.name,
node.relpath,
node.nodesize,
node.maccess,
node.parent,
node.children)
if node.type == TYPE_ARCHIVED:
return NodeArchived(node.name,
node.relpath,
node.nodesize,
node.md5,
node.archive,
node.parent,
node.children)
if node.type == TYPE_STORAGE:
return NodeStorage(node.name,
node.free,
node.total,
node.nodesize,
node.ts,
node.attr,
node.parent,
node.children)
if node.type == TYPE_META:
return NodeMeta(node.name,
node.attr,
node.parent,
node.children)
return node
class NodeAny(NodeMixin): # type: ignore
"""generic node"""

@ -123,7 +123,7 @@ class TestUpdate(unittest.TestCase):
noder.print_tree(top)
# explore the top node to find all nodes
self.assertTrue(len(top.children) == 1)
self.assertEqual(len(top.children), 1)
storage = top.children[0]
self.assertTrue(len(storage.children) == 8)

Loading…
Cancel
Save