Added alias description functionality to conf #98

Changed Alias constructor, added tests for this behavior, and added
a few lines in the default conf describing how to define alias
descriptions.
main
Bill Flynn 7 years ago
parent 6dd4b319ea
commit 4362c649b2

@ -88,6 +88,13 @@ active = force_list(default=list('alias'))
# shell commands can also be defined, by prefixing them with a bang `!`, e.g:
# count = !pubs list -k | wc -l
# aliases can also be defined with descriptions using the following configobj
# subsectioning. NOTE: any aliases defined this way should come after all other
# aliases, otherwise simple aliases will be ignored.
# [[[count]]]
# command = !pubs list -k | wc -l
# description = lists number of pubs in repo
[internal]
# The version of this configuration file. Do not edit.
version = string(min=5, default='{}')

@ -8,26 +8,30 @@ from ...pubs_cmd import execute
class Alias(object):
def __init__(self, name, definition):
def __init__(self, name, definition, description=None):
self.name = name
self.definition = definition
if not description:
self.description = "user alias for `%s`"%definition
else:
self.description = description
def parser(self, parser):
self.parser = parser
p = parser.add_parser(self.name, help='user defined command')
p = parser.add_parser(self.name, help=self.description)
p.add_argument('arguments', nargs='*',
help="arguments to be passed to the user defined command")
help="arguments to be passed to %s"%self.name)
return p
def command(self, conf, args):
raise NotImplementedError
@classmethod
def create_alias(cls, name, definition):
def create_alias(cls, name, definition, description=None):
if len(definition) > 0 and definition[0] == '!':
return ShellAlias(name, definition[1:])
return ShellAlias(name, definition[1:], description)
else:
return CommandAlias(name, definition)
return CommandAlias(name, definition, description)
class CommandAlias(Alias):
@ -64,8 +68,16 @@ class AliasPlugin(PapersPlugin):
def __init__(self, conf):
self.aliases = []
if 'alias' in conf['plugins']:
for name, definition in conf['plugins']['alias'].items():
self.aliases.append(Alias.create_alias(name, definition))
for name, entry in conf['plugins']['alias'].items():
if isinstance(entry, dict):
definition = entry.get('command')
description = entry.get('description', None)
else:
definition = entry
description = None
alias = Alias.create_alias(name, definition, description)
self.aliases.append(alias)
def update_parser(self, subparsers, conf):
"""Add subcommand to the provided subparser"""

@ -93,3 +93,47 @@ class AliasPluginTestCase(unittest.TestCase):
'count': '!pubs list -k | wc -l'}
self.plugin = AliasPlugin(self.conf)
self.assertEqual(len(self.plugin.aliases), 2)
def testAliasPluginNestedDefinitionType(self):
self.conf['plugins']['alias'] = {'print': {'description': 'print this',
'command': 'open -w lpppp'}}
self.plugin = AliasPlugin(self.conf)
self.assertEqual(len(self.plugin.aliases), 1)
self.assertEqual(type(self.plugin.aliases[0]), CommandAlias)
self.assertEqual(self.plugin.aliases[0].name, 'print')
self.assertEqual(self.plugin.aliases[0].description, 'print this')
self.assertEqual(self.plugin.aliases[0].definition, 'open -w lpppp')
def testAliasPluginMixedDefinitionTypes(self):
self.conf['plugins']['alias'] = {'print': {'description': 'print this',
'command': 'open -w lpppp'},
'count': '!pubs list -k | wc -l'}
self.plugin = AliasPlugin(self.conf)
self.plugin.aliases = sorted(self.plugin.aliases, key=lambda a: a.name)
self.assertEqual(len(self.plugin.aliases), 2)
self.assertEqual(type(self.plugin.aliases[1]), CommandAlias)
self.assertEqual(type(self.plugin.aliases[0]), ShellAlias)
self.assertEqual(self.plugin.aliases[0].name, 'count')
self.assertEqual(self.plugin.aliases[0].description,
'user alias for `pubs list -k | wc -l`')
self.assertEqual(self.plugin.aliases[0].definition,
'pubs list -k | wc -l')
self.assertEqual(self.plugin.aliases[1].name, 'print')
self.assertEqual(self.plugin.aliases[1].description, 'print this')
self.assertEqual(self.plugin.aliases[1].definition, 'open -w lpppp')
def testAliasPluginWrongDefinitionOrder(self):
self.conf['plugins']['alias'] = {'print': {'description': 'print this',
'command': 'open -w lpppp',
'count': '!pubs list -k | wc -l'}}
self.plugin = AliasPlugin(self.conf)
self.assertEqual(len(self.plugin.aliases), 1)
self.assertEqual(type(self.plugin.aliases[0]), CommandAlias)
self.assertEqual(self.plugin.aliases[0].name, 'print')
self.assertEqual(self.plugin.aliases[0].description, 'print this')
self.assertEqual(self.plugin.aliases[0].definition, 'open -w lpppp')

Loading…
Cancel
Save