adding ability to edit storage meta with default editor

pull/6/head
deadc0de6 7 years ago
parent 2e5424a337
commit 6e80026fcb

@ -19,6 +19,7 @@ from .logger import Logger
from .catalog import Catalog
from .walker import Walker
from .noder import Noder
from .utils import *
NAME = 'catcli'
CUR = os.path.dirname(os.path.abspath(__file__))
@ -41,6 +42,7 @@ Usage:
{1} rm [--catalog=<path>] [-fV] <storage>
{1} tree [--catalog=<path>] [-V] [<path>]
{1} rename [--catalog=<path>] [-fV] <storage> <name>
{1} edit [--catalog=<path>] [-fV] <storage>
{1} graph [--catalog=<path>] [-V] [<path>]
{1} help
{1} --help
@ -73,7 +75,8 @@ def cmd_index(args, noder, catalog, top):
return False
start = datetime.datetime.now()
walker = Walker(noder, nohash=nohash)
root = noder.storage_node(name, path, parent=top, attr=args['--meta'])
attr = noder.clean_storage_attr(args['--meta'])
root = noder.storage_node(name, path, parent=top, attr=attr)
_, cnt = walker.index(path, name, parent=root, parentpath=path)
if subsize:
noder.rec_size(root)
@ -104,8 +107,8 @@ def cmd_rm(args, noder, catalog, top):
if what in storages:
node = next(filter(lambda x: x.name == what, top.children))
node.parent = None
catalog.save(top)
Logger.info('Storage \"{}\" removed'.format(what))
if catalog.save(top):
Logger.info('Storage \"{}\" removed'.format(what))
else:
Logger.err('Storage named \"{}\" does not exist'.format(what))
return top
@ -139,8 +142,25 @@ def cmd_rename(args, noder, catalog, top):
if storage in storages:
node = next(filter(lambda x: x.name == storage, top.children))
node.name = new
catalog.save(top)
Logger.info('Storage \"{}\" renamed to \"{}\"'.format(storage, new))
if catalog.save(top):
Logger.info('Storage \"{}\" renamed to \"{}\"'.format(storage, new))
else:
Logger.err('Storage named \"{}\" does not exist'.format(storage))
return top
def cmd_edit(args, noder, catalog, top):
storage = args['<storage>']
storages = list(x.name for x in top.children)
if storage in storages:
node = next(filter(lambda x: x.name == storage, top.children))
attr = node.attr
if not attr:
attr = ''
new = edit(attr)
node.attr = noder.clean_storage_attr(new)
if catalog.save(top):
Logger.info('Storage \"{}\" edited'.format(storage))
else:
Logger.err('Storage named \"{}\" does not exist'.format(storage))
return top
@ -190,6 +210,8 @@ def main():
cmd_graph(args, noder, top)
elif args['rename']:
cmd_rename(args, noder, catalog, top)
elif args['edit']:
cmd_edit(args, noder, catalog, top)
return True

@ -32,7 +32,7 @@ class Logger:
''' print a storage node '''
end = ''
if attr:
end = ' {}({}){}'.format(Logger.GRAY, ','.join(attr), Logger.RESET)
end = ' {}({}){}'.format(Logger.GRAY, attr, Logger.RESET)
s = '{}{}storage{}:'.format(pre, Logger.UND, Logger.RESET)
s += ' {}{}{}{}'.format(Logger.PURPLE, name, Logger.RESET, end)
sys.stdout.write(s+'\n')

@ -45,6 +45,11 @@ class Noder:
''' return a list of all storage names '''
return [x.name for x in list(top.children)]
def clean_storage_attr(self, attr):
if not attr:
return ''
return ', '.join(attr.splitlines())
def get_node(self, top, path):
''' get the node at path '''
r = anytree.resolver.Resolver('name')

@ -7,6 +7,9 @@ helpers
import os
import hashlib
import sys
import tempfile
import subprocess
# local imports
from catcli.logger import Logger
@ -49,3 +52,16 @@ def ask(question):
''' ask the user what to do '''
resp = input('{} [y|N] ? '.format(question))
return resp.lower() == 'y'
def edit(string):
''' edit the information with the default EDITOR '''
string = string.encode('utf-8')
EDITOR = os.environ.get('EDITOR','vim')
with tempfile.NamedTemporaryFile(prefix='catcli', suffix='.tmp') as f:
f.write(string)
f.flush()
subprocess.call([EDITOR, f.name])
f.seek(0)
new = f.read()
return new.decode('utf-8')

Loading…
Cancel
Save