features-42
deadc0de6 3 months ago
parent f3c4a86b1d
commit 638085ce98

@ -12,7 +12,9 @@ import sys
import os
import datetime
from typing import Dict, Any, List
import typing
from docopt import docopt
import cmd2
# local imports
from catcli.version import __version__ as VERSION
@ -54,6 +56,7 @@ Usage:
{NAME} rename [--catalog=<path>] [-BCfV] <storage> <name>
{NAME} edit [--catalog=<path>] [-BCfV] <storage>
{NAME} graph [--catalog=<path>] [-BCV] [<path>]
{NAME} [--catalog=<path>]
{NAME} fixsizes [--catalog=<path>]
{NAME} print_supported_formats
{NAME} help
@ -294,6 +297,73 @@ def cmd_edit(args: Dict[str, Any],
Logger.err(f'Storage named \"{storage}\" does not exist')
@typing.no_type_check
class CatcliRepl(cmd2.Cmd):
"""catcli repl"""
prompt = 'catcli> '
intro = ''
def __init__(self):
super().__init__()
# remove built-ins
del cmd2.Cmd.do_alias
del cmd2.Cmd.do_edit
del cmd2.Cmd.do_macro
del cmd2.Cmd.do_run_pyscript
del cmd2.Cmd.do_run_script
del cmd2.Cmd.do_set
del cmd2.Cmd.do_shell
del cmd2.Cmd.do_shortcuts
self.hidden_commands.append('EOF')
def cmdloop(self, intro=None):
return cmd2.Cmd.cmdloop(self, intro)
@cmd2.with_argument_list
def do_ls(self, arglist: List[str]):
"""ls <path>"""
arglist.insert(0, '--no-banner')
arglist.insert(0, 'ls')
args, noder, _, _, top = init(arglist)
cmd_ls(args, noder, top)
return False
@cmd2.with_argument_list
def do_tree(self, arglist):
"""tree <path>"""
arglist.insert(0, '--no-banner')
arglist.insert(0, 'tree')
args, noder, _, _, top = init(arglist)
cmd_ls(args, noder, top)
@cmd2.with_argument_list
def do_find(self, arglist):
"""find <term>"""
arglist.insert(0, '--no-banner')
arglist.insert(0, 'find')
args, noder, _, _, top = init(arglist)
cmd_find(args, noder, top)
@cmd2.with_argument_list
def do_du(self, arglist):
"""du <path>"""
arglist.insert(0, '--no-banner')
arglist.insert(0, 'du')
args, noder, _, _, top = init(arglist)
cmd_du(args, noder, top)
def do_help(self, _):
"""help"""
print(USAGE)
return False
# pylint: disable=C0103
def do_EOF(self, _):
"""exit repl"""
return True
def banner() -> None:
"""print banner"""
Logger.stderr_nocolor(BANNER)
@ -309,24 +379,23 @@ def print_supported_formats() -> None:
print('"fzf-csv" : fzf to csv (only valid for find)')
def main() -> bool:
"""entry point"""
args = docopt(USAGE, version=VERSION)
def init(args):
"""parse catcli arguments"""
args = docopt(USAGE, argv=args, version=VERSION)
if args['help'] or args['--help']:
print(USAGE)
return True
sys.exit(0)
if args['print_supported_formats']:
print_supported_formats()
return True
sys.exit(0)
# check format
fmt = args['--format']
if fmt not in FORMATS:
Logger.err(f'bad format: {fmt}')
print_supported_formats()
return False
sys.exit(0)
if args['--verbose']:
print(f'args: {args}')
@ -355,6 +424,13 @@ def main() -> bool:
meta = noder.update_metanode(top)
catalog.set_metanode(meta)
return args, noder, catalog, catalog_path, top
def main() -> bool:
"""entry point"""
args, noder, catalog, catalog_path, top = init(sys.argv[1:])
# parse command
try:
if args['index']:
@ -417,6 +493,8 @@ def main() -> bool:
Logger.err(f'no such catalog: {catalog_path}')
return False
cmd_fixsizes(top, noder, catalog)
else:
CatcliRepl().cmdloop()
except CatcliException as exc:
Logger.stderr_nocolor('ERROR ' + str(exc))
return False

@ -4,3 +4,5 @@ anytree; python_version >= '3.0'
pyfzf; python_version >= '3.0'
fusepy; python_version >= '3.0'
natsort; python_version >= '3.0'
cmd2; python_version >= '3.0'
gnureadline; python_version >= '3.0'

Loading…
Cancel
Save