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) * [Find files](#find-files)
* [Display entire tree](#display-entire-tree) * [Display entire tree](#display-entire-tree)
* [Catalog graph](#catalog-graph) * [Catalog graph](#catalog-graph)
* [Example](#example) * [Example](#example)
* [Contribution](#contribution) * [Contribution](#contribution)
@ -243,10 +243,10 @@ $ catcli find 9
test/c/9 [size:0] 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) that allows to handle the found file(s)
```bash ```bash
$ catcli find 9 -s $ catcli find 9 --script
test/c/9 [size:0] test/c/9 [size:0]
op=file; source=/media/mnt; $op ${source}/test/c/9 op=file; source=/media/mnt; $op ${source}/test/c/9
``` ```

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

@ -34,9 +34,10 @@ class Noder:
TYPE_STORAGE = 'storage' TYPE_STORAGE = 'storage'
TYPE_META = 'meta' TYPE_META = 'meta'
def __init__(self, verbose=False): def __init__(self, verbose=False, sortsize=False):
self.hash = True self.hash = True
self.verbose = verbose self.verbose = verbose
self.sortsize = sortsize
def set_hashing(self, val): def set_hashing(self, val):
self.hash = val self.hash = val
@ -165,7 +166,7 @@ class Noder:
def print_tree(self, node, style=anytree.ContRoundStyle()): def print_tree(self, node, style=anytree.ContRoundStyle()):
''' print the tree similar to unix tool "tree" ''' ''' 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: for pre, fill, node in rend:
self._print_node(node, pre=pre, withdepth=True) self._print_node(node, pre=pre, withdepth=True)
@ -214,7 +215,7 @@ class Noder:
if rec: if rec:
self.print_tree(found[0].parent) self.print_tree(found[0].parent)
return return
found = sorted(found, key=self.sort_walk) found = sorted(found, key=self._sort, reverse=self.sortsize)
self._print_node(found[0].parent, self._print_node(found[0].parent,
withpath=False, withdepth=True) withpath=False, withdepth=True)
for f in found: for f in found:
@ -226,14 +227,28 @@ class Noder:
############################################################### ###############################################################
# diverse # diverse
############################################################### ###############################################################
def sort_tree(self, items): def _sort_tree(self, items):
''' sorting a list of 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): def _sort(self, x):
''' for sorting a node ''' 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()) 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'): def to_dot(self, node, path='tree.dot'):
''' export to dot for graphing ''' ''' export to dot for graphing '''
anytree.exporter.DotExporter(node).to_dotfile(path) anytree.exporter.DotExporter(node).to_dotfile(path)

Loading…
Cancel
Save