add ability to sort by size

pull/6/head
deadc0de6 7 years ago
parent 6e80026fcb
commit e0fe60634f

@ -66,7 +66,7 @@ See the [example](#example) for an overview of the available features.
* [Find files](#find-files)
* [Display entire tree](#display-entire-tree)
* [Catalog graph](#catalog-graph)
* [Example](#example)
* [Contribution](#contribution)
@ -243,10 +243,10 @@ $ catcli find 9
test/c/9 [size:0]
```
When using the `-s` switch, a one-liner is generated
When using the `--script` switch, a one-liner is generated
that allows to handle the found file(s)
```bash
$ catcli find 9 -s
$ catcli find 9 --script
test/c/9 [size:0]
op=file; source=/media/mnt; $op ${source}/test/c/9
```

@ -37,10 +37,10 @@ USAGE = """
Usage:
{1} index [--catalog=<path>] [--meta=<meta>...] [-fcuV] <name> <path>
{1} ls [--catalog=<path>] [-rV] [<path>]
{1} find [--catalog=<path>] [-sV] <term>
{1} ls [--catalog=<path>] [-rVS] [<path>]
{1} find [--catalog=<path>] [-bVS] <term>
{1} rm [--catalog=<path>] [-fV] <storage>
{1} tree [--catalog=<path>] [-V] [<path>]
{1} tree [--catalog=<path>] [-VS] [<path>]
{1} rename [--catalog=<path>] [-fV] <storage> <name>
{1} edit [--catalog=<path>] [-fV] <storage>
{1} graph [--catalog=<path>] [-V] [<path>]
@ -53,7 +53,8 @@ Options:
--meta=<meta> Additional attribute to store [default: ].
-u --subsize Store size of folders [default: False].
-f --force Force overwrite [default: False].
-s --script Output script to manage found file(s) [default: False].
-b --script Output script to manage found file(s) [default: False].
-S --sortsize Sort by size, largest first [default: False].
-c --hash Calculate md5 hash [default: False].
-r --recursive Recursive [default: False].
-V --verbose Be verbose [default: False].
@ -182,7 +183,7 @@ def main():
banner()
# init noder
noder = Noder(verbose=args['--verbose'])
noder = Noder(verbose=args['--verbose'], sortsize=args['--sortsize'])
# init catalog
catalog = Catalog(args['--catalog'], verbose=args['--verbose'],
force=args['--force'])

@ -34,9 +34,10 @@ class Noder:
TYPE_STORAGE = 'storage'
TYPE_META = 'meta'
def __init__(self, verbose=False):
def __init__(self, verbose=False, sortsize=False):
self.hash = True
self.verbose = verbose
self.sortsize = sortsize
def set_hashing(self, val):
self.hash = val
@ -165,7 +166,7 @@ class Noder:
def print_tree(self, node, style=anytree.ContRoundStyle()):
''' print the tree similar to unix tool "tree" '''
rend = anytree.RenderTree(node, childiter=self.sort_tree)
rend = anytree.RenderTree(node, childiter=self._sort_tree)
for pre, fill, node in rend:
self._print_node(node, pre=pre, withdepth=True)
@ -214,7 +215,7 @@ class Noder:
if rec:
self.print_tree(found[0].parent)
return
found = sorted(found, key=self.sort_walk)
found = sorted(found, key=self._sort, reverse=self.sortsize)
self._print_node(found[0].parent,
withpath=False, withdepth=True)
for f in found:
@ -226,14 +227,28 @@ class Noder:
###############################################################
# diverse
###############################################################
def sort_tree(self, items):
def _sort_tree(self, items):
''' sorting a list of items '''
return sorted(items, key=self.sort_walk)
return sorted(items, key=self._sort, reverse=self.sortsize)
def sort_walk(self, n):
''' for sorting a node '''
def _sort(self, x):
if self.sortsize:
return self._sort_size(x)
return self._sort_fs(x)
def _sort_fs(self, n):
''' sorting nodes dir first and alpha '''
return (n.type, n.name.lstrip('\.').lower())
def _sort_size(self, n):
''' sorting nodes by size '''
try:
if not n.size:
return 0
return n.size
except AttributeError:
return 0
def to_dot(self, node, path='tree.dot'):
''' export to dot for graphing '''
anytree.exporter.DotExporter(node).to_dotfile(path)

Loading…
Cancel
Save