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

@ -12,7 +12,9 @@ import sys
import os import os
import datetime import datetime
from typing import Dict, Any, List from typing import Dict, Any, List
import typing
from docopt import docopt from docopt import docopt
import cmd2
# local imports # local imports
from catcli.version import __version__ as VERSION from catcli.version import __version__ as VERSION
@ -54,6 +56,7 @@ Usage:
{NAME} rename [--catalog=<path>] [-BCfV] <storage> <name> {NAME} rename [--catalog=<path>] [-BCfV] <storage> <name>
{NAME} edit [--catalog=<path>] [-BCfV] <storage> {NAME} edit [--catalog=<path>] [-BCfV] <storage>
{NAME} graph [--catalog=<path>] [-BCV] [<path>] {NAME} graph [--catalog=<path>] [-BCV] [<path>]
{NAME} [--catalog=<path>]
{NAME} fixsizes [--catalog=<path>] {NAME} fixsizes [--catalog=<path>]
{NAME} print_supported_formats {NAME} print_supported_formats
{NAME} help {NAME} help
@ -294,6 +297,73 @@ def cmd_edit(args: Dict[str, Any],
Logger.err(f'Storage named \"{storage}\" does not exist') 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: def banner() -> None:
"""print banner""" """print banner"""
Logger.stderr_nocolor(BANNER) Logger.stderr_nocolor(BANNER)
@ -309,24 +379,23 @@ def print_supported_formats() -> None:
print('"fzf-csv" : fzf to csv (only valid for find)') print('"fzf-csv" : fzf to csv (only valid for find)')
def main() -> bool: def init(args):
"""entry point""" """parse catcli arguments"""
args = docopt(USAGE, version=VERSION) args = docopt(USAGE, argv=args, version=VERSION)
if args['help'] or args['--help']: if args['help'] or args['--help']:
print(USAGE) print(USAGE)
return True sys.exit(0)
if args['print_supported_formats']: if args['print_supported_formats']:
print_supported_formats() print_supported_formats()
return True sys.exit(0)
# check format
fmt = args['--format'] fmt = args['--format']
if fmt not in FORMATS: if fmt not in FORMATS:
Logger.err(f'bad format: {fmt}') Logger.err(f'bad format: {fmt}')
print_supported_formats() print_supported_formats()
return False sys.exit(0)
if args['--verbose']: if args['--verbose']:
print(f'args: {args}') print(f'args: {args}')
@ -355,6 +424,13 @@ def main() -> bool:
meta = noder.update_metanode(top) meta = noder.update_metanode(top)
catalog.set_metanode(meta) 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 # parse command
try: try:
if args['index']: if args['index']:
@ -417,6 +493,8 @@ def main() -> bool:
Logger.err(f'no such catalog: {catalog_path}') Logger.err(f'no such catalog: {catalog_path}')
return False return False
cmd_fixsizes(top, noder, catalog) cmd_fixsizes(top, noder, catalog)
else:
CatcliRepl().cmdloop()
except CatcliException as exc: except CatcliException as exc:
Logger.stderr_nocolor('ERROR ' + str(exc)) Logger.stderr_nocolor('ERROR ' + str(exc))
return False return False

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

Loading…
Cancel
Save