Mercurial > python-hglib
diff hglib/util.py @ 3:d7903b923217
util: add cmdbuilder, a helper function to generate the command to run
author | Idan Kamara <idankk86@gmail.com> |
---|---|
date | Tue, 09 Aug 2011 00:39:25 +0300 |
parents | 79f88b4db15f |
children | 3ac38d500d68 |
line wrap: on
line diff
--- a/hglib/util.py Sat Jul 23 22:55:36 2011 +0300 +++ b/hglib/util.py Tue Aug 09 00:39:25 2011 +0300 @@ -4,3 +4,57 @@ ''' list(grouper(2, range(4))) -> [(0, 1), (2, 3)] ''' args = [iter(iterable)] * n return itertools.izip(*args) + +def cmdbuilder(name, *args, **kwargs): + """ + A helper for building the command arguments + + args are the positional arguments + + kwargs are the options + keys that are single lettered are prepended with '-', others with '--', + underscores are replaced with dashes + + keys with False boolean values are ignored, lists add the key multiple times + + None arguments are skipped + + >>> cmdbuilder('cmd', a=True, b=False, c=None) + ['cmd', '-a'] + >>> cmdbuilder('cmd', long=True) + ['cmd', '--long'] + >>> cmdbuilder('cmd', str='s') + ['cmd', '--str', 's'] + >>> cmdbuilder('cmd', d_ash=True) + ['cmd', '--d-ash'] + >>> cmdbuilder('cmd', _=True) + ['cmd', '-'] + >>> cmdbuilder('cmd', list=[1, 2]) + ['cmd', '--list', '1', '--list', '2'] + >>> cmdbuilder('cmd', None) + ['cmd'] + """ + cmd = [name] + for arg, val in kwargs.items(): + if val is None: + continue + + arg = arg.replace('_', '-') + if arg != '-': + arg = '-' + arg if len(arg) == 1 else '--' + arg + if isinstance(val, bool): + if val: + cmd.append(arg) + elif isinstance(val, list): + for v in val: + cmd.append(arg) + cmd.append(str(v)) + else: + cmd.append(arg) + cmd.append(str(val)) + + for a in args: + if a is not None: + cmd.append(a) + + return cmd