dont_show_children, aggregate data
This commit is contained in:
parent
60ccd874df
commit
de88767812
Binary file not shown.
Binary file not shown.
42
src/tree.py
42
src/tree.py
|
@ -1,6 +1,7 @@
|
||||||
import os
|
import os
|
||||||
from src.colors import RED, YELLOW, GREEN, CYAN , BLUE, PURPLE
|
from pathlib import Path
|
||||||
|
|
||||||
|
from src.colors import RED, YELLOW, GREEN, CYAN , BLUE, PURPLE
|
||||||
import src.tree_repr as _tree_repr
|
import src.tree_repr as _tree_repr
|
||||||
|
|
||||||
class NerdTree():
|
class NerdTree():
|
||||||
|
@ -19,6 +20,21 @@ class NerdTree():
|
||||||
else:
|
else:
|
||||||
self.json_tree = {}
|
self.json_tree = {}
|
||||||
|
|
||||||
|
def get_path_obj(self, abs_path_item):
|
||||||
|
## using lstat not produce error in case of symbolic link
|
||||||
|
path_object = Path(abs_path_item)
|
||||||
|
|
||||||
|
if path_object.is_dir():
|
||||||
|
item_type = 'd'
|
||||||
|
elif path_object.is_file():
|
||||||
|
item_type = 'f'
|
||||||
|
elif path_object.is_symlink():
|
||||||
|
item_type = 'l'
|
||||||
|
|
||||||
|
assert item_type
|
||||||
|
|
||||||
|
return (item_type, path_object)
|
||||||
|
|
||||||
def sort_directories_first(self, startpath):
|
def sort_directories_first(self, startpath):
|
||||||
files = []
|
files = []
|
||||||
dirs = []
|
dirs = []
|
||||||
|
@ -97,21 +113,23 @@ class NerdTree():
|
||||||
continue
|
continue
|
||||||
|
|
||||||
abs_path_item = startpath+item
|
abs_path_item = startpath+item
|
||||||
stat_item = os.stat(abs_path_item)
|
item_type, path_object = self.get_path_obj(abs_path_item)
|
||||||
|
|
||||||
if os.path.isdir(abs_path_item):
|
stat_item = path_object.lstat()
|
||||||
|
|
||||||
|
if path_object.is_dir():
|
||||||
d['children'].append(self.tree_struct(abs_path_item, path=path[:]))
|
d['children'].append(self.tree_struct(abs_path_item, path=path[:]))
|
||||||
else:
|
else:
|
||||||
path_copy = path[:]
|
path_copy = path[:]
|
||||||
path_copy.append({
|
path_copy.append({
|
||||||
'name' : item,
|
'name' : item,
|
||||||
'type' : 'f',
|
'type' : item_type,
|
||||||
'abs_path' : abs_path_item
|
'abs_path' : abs_path_item
|
||||||
})
|
})
|
||||||
|
|
||||||
d['children'].append({
|
d['children'].append({
|
||||||
'name' : item,
|
'name' : item,
|
||||||
'type' : 'f',
|
'type' : item_type,
|
||||||
'abs_path' : abs_path_item,
|
'abs_path' : abs_path_item,
|
||||||
'path' : path_copy,
|
'path' : path_copy,
|
||||||
'size' : stat_item.st_size,
|
'size' : stat_item.st_size,
|
||||||
|
@ -144,7 +162,7 @@ class NerdTree():
|
||||||
}
|
}
|
||||||
## if you want count the current directory as item you must sum 1
|
## if you want count the current directory as item you must sum 1
|
||||||
## if you want count the current directory size you must include item['size']
|
## if you want count the current directory size you must include item['size']
|
||||||
subtree['subtree_size'] += subtree_compute['subtree_size'] + item['size']
|
subtree['subtree_size'] += subtree_compute['subtree_size'] + item['subtree_size']
|
||||||
subtree['subtree_items'] += subtree_compute['subtree_items'] + 1
|
subtree['subtree_items'] += subtree_compute['subtree_items'] + 1
|
||||||
else:
|
else:
|
||||||
subtree['subtree_size'] += item['size']
|
subtree['subtree_size'] += item['size']
|
||||||
|
@ -167,9 +185,17 @@ class NerdTree():
|
||||||
else:
|
else:
|
||||||
nerd_tree_txt = rootnode_name
|
nerd_tree_txt = rootnode_name
|
||||||
|
|
||||||
if rootnode.get('nchildren') is not None:
|
nodefound = rootnode.get('found')
|
||||||
nerd_tree_txt += ' (%s▾)' % rootnode['nchildren']
|
if nodefound and self.opts['dont_show_children_nodes']:
|
||||||
|
if rootnode.get('subtree_items'):
|
||||||
|
nerd_tree_txt += ' (%s item(s)/%s %s ▾)' % (rootnode['subtree_items'], rootnode['subtree_size'], 'b')
|
||||||
|
# return nerd_tree_txt
|
||||||
|
# else:
|
||||||
|
# nerd_tree_txt += ' (0 - 0 ▾)'
|
||||||
|
|
||||||
|
items = []
|
||||||
|
|
||||||
|
else:
|
||||||
items = rootnode.get('children') or []
|
items = rootnode.get('children') or []
|
||||||
|
|
||||||
for n, item in enumerate(items):
|
for n, item in enumerate(items):
|
||||||
|
|
|
@ -19,7 +19,7 @@ class NerdTreeFind(NerdTree):
|
||||||
def find_node_recursively(self, node):
|
def find_node_recursively(self, node):
|
||||||
if node['name'] == self.item_name:
|
if node['name'] == self.item_name:
|
||||||
node_copy = node.copy()
|
node_copy = node.copy()
|
||||||
node_copy.update({'color_formatter' : YELLOW})
|
node_copy.update({'color_formatter' : YELLOW, 'found' : 1})
|
||||||
self.results.append(node_copy)
|
self.results.append(node_copy)
|
||||||
|
|
||||||
children = node.get('children') or []
|
children = node.get('children') or []
|
||||||
|
@ -30,7 +30,7 @@ class NerdTreeFind(NerdTree):
|
||||||
else:
|
else:
|
||||||
if item_child['name'] == self.item_name:
|
if item_child['name'] == self.item_name:
|
||||||
item_child_copy = item_child.copy()
|
item_child_copy = item_child.copy()
|
||||||
item_child_copy.update({'color_formatter' : YELLOW})
|
item_child_copy.update({'color_formatter' : YELLOW, 'found' : 1})
|
||||||
self.results.append(item_child_copy)
|
self.results.append(item_child_copy)
|
||||||
|
|
||||||
def find_node(self):
|
def find_node(self):
|
||||||
|
@ -64,16 +64,19 @@ class NerdTreeFind(NerdTree):
|
||||||
'''
|
'''
|
||||||
results = self.find_node()
|
results = self.find_node()
|
||||||
|
|
||||||
dont_show_children_nodes = self.find_opts['dont_show_children_nodes'] if self.find_opts.get('dont_show_children_nodes') is not None else False
|
## remove from this level the option
|
||||||
|
|
||||||
if not results:
|
if not results:
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
if dont_show_children_nodes:
|
# if dont_show_children_nodes:
|
||||||
for result in results:
|
# for result in results:
|
||||||
children = result.get('children') or []
|
# children = result.get('children') or []
|
||||||
result['nchildren'] = len(children)
|
# result['nchildren'] = len(children)
|
||||||
result['children'] = []
|
# result['children'] = []
|
||||||
|
dont_show_children_nodes = self.find_opts['dont_show_children_nodes'] if self.find_opts.get('dont_show_children_nodes') is not None else False
|
||||||
|
self.opts['dont_show_children_nodes'] = dont_show_children_nodes
|
||||||
|
|
||||||
|
|
||||||
tree_struct = {}
|
tree_struct = {}
|
||||||
|
|
||||||
|
@ -104,6 +107,7 @@ class NerdTreeFind(NerdTree):
|
||||||
if not islastpath: children.append(pcopy)
|
if not islastpath: children.append(pcopy)
|
||||||
else : children.append(node)
|
else : children.append(node)
|
||||||
|
|
||||||
|
self.compute_aggregate_recursively(tree_struct)
|
||||||
return tree_struct
|
return tree_struct
|
||||||
|
|
||||||
def reset(self, new_item_name, new_opts):
|
def reset(self, new_item_name, new_opts):
|
||||||
|
|
Loading…
Reference in New Issue