예제 #1
0
def test_subparser_parent_defaults():
    p = ArgumentParser()
    p.add_argument('--a')
    p.set_post_defaults(a='default')
    p.add_subparsers()
    p.add_subparser('sub')
    p.add_subparser('sub_with_default', parent_defaults={'a': 'sub_default'})
    # Make sure normal default works
    result = p.parse_args(['sub'])
    assert result.a == 'default'
    # Test subparser default
    result = p.parse_args(['sub_with_default'])
    assert result.a == 'sub_default'
    # Subparser default should not override explicit one
    result = p.parse_args(['--a', 'manual', 'sub_with_default'])
    assert result.a == 'manual'
예제 #2
0
def test_subparser_nested_namespace():
    p = ArgumentParser()
    p.add_argument('--outer')
    p.add_subparsers(nested_namespaces=True)
    sub = p.add_subparser('sub')
    sub.add_argument('--inner')
    sub.add_subparsers()
    subsub = sub.add_subparser('subsub')
    subsub.add_argument('--innerinner')
    result = p.parse_args(
        ['--outer', 'a', 'sub', '--inner', 'b', 'subsub', '--innerinner', 'c'])
    assert result.outer == 'a'
    # First subparser values should be nested under subparser name
    assert result.sub.inner == 'b'
    assert not hasattr(result, 'inner')
    # The second layer did not define nested_namespaces, results should be in first subparser namespace
    assert result.sub.innerinner == 'c'
    assert not hasattr(result, 'innerinner')
예제 #3
0
def test_post_defaults():
    class CustomAction(Action):
        def __call__(self, parser, namespace, values, option_string=None):
            if not hasattr(namespace, 'post_set'):
                namespace.post_set = 'custom'

    p = ArgumentParser()
    p.add_argument('--post-set')
    p.add_argument('--custom', action=CustomAction, nargs=0)
    p.set_post_defaults(post_set='default')
    # Explicitly specified, no defaults should be set
    result = p.parse_args(['--post-set', 'manual'])
    assert result.post_set == 'manual'
    # Nothing supplied, should get the post set default
    result = p.parse_args([])
    assert result.post_set == 'default'
    # Custom action should be allowed to set default
    result = p.parse_args(['--custom'])
    assert result.post_set == 'custom'
예제 #4
0
                    # wrap_columns
                    if wrapped_width <= 0:
                        raise TerminalTableError(
                            'Table could not be rendered correctly using it given data'
                        )
                    output_value = word_wrap(str(value), wrapped_width)
                output_row.append(output_value)
            output_table.append(output_row)
        return self._build_table(self.type, output_table)


class TerminalTableError(Exception):
    """ A CLI table error"""


table_parser = ArgumentParser(add_help=False)
table_parser.add_argument('--table-type',
                          choices=list(TerminalTable.supported_table_types()),
                          default='single',
                          help='Select output table style')
table_parser.add_argument(
    '--porcelain',
    dest='table_type',
    action='store_const',
    const='porcelain',
    help='Make the output parseable. Similar to using `--table-type porcelain`'
)


def word_wrap(text, max_length):
    """A helper method designed to return a wrapped string.