Exemple #1
0
    def test_submodule_handler_definition_callable_decorator(self):
        json_data = {
            'modules': {
                'root': {
                    'modules': {
                        'command': {
                            'args': [{
                                'long': '--foo'
                            }]
                        }
                    }
                }
            }
        }
        with open(DEFINITIONS_FILE, 'w') as f:
            f.write(json.dumps(json_data))
        parser_def = ParserDefinition('root.py')

        @parser_def.callable('command')
        def get_opts(opts):
            return 'get_opts called: foo={}'.format(opts.foo)

        argparser = parser_def.get_parser()
        opts = argparser.parse_args(['command', '--foo', 'bar'])
        expected = 'get_opts called: foo=bar'
        self.assertEqual(opts.func(opts), expected)
 def test_init_definitions_file_contains_correct_structure(self):
     ParserDefinition.create('test_script.py', DEFINITIONS_FILE)
     expected = {
         'modules': {
             'test_script': {
                 'examples': [],
                 'args': []
             }
         }
     }
     self.assertDictEqual(argutil.load(DEFINITIONS_FILE), expected)
    def setUpClass(cls):
        cls.filepath = 'test_script.py'
        cls.module = argutil.get_module(cls.filepath)
        cls.env = {
            'l_str': lambda s: str(s).lower(),
        }
        with argutil.WorkingDirectory(WD):
            parser_def = ParserDefinition.create(cls.filepath)

            def add_arg(name, **kwargs):
                return parser_def.add_argument(name, **kwargs)

            add_arg('positional')
            add_arg('positional_list', nargs='*', type=int)
            add_arg('--flag', action='store_true', help='boolean flag option')
            add_arg('--opt', short='-o', type='int')
            add_arg('--opt-list', nargs='+', type=str)
            add_arg('--opt-list-with-default', nargs='+', default=[])
            add_arg('--env-type', type='l_str')
            parser_def.env['hex'] = lambda s: hex(int(s))
            add_arg('--def-env-type', type='hex')
            argutil.GLOBAL_ENV['u_str'] = lambda s: s.upper()
            add_arg('--global-env-type', type='u_str')
            add_arg('--default-from-file')
            parser_def.add_example('test --flag',
                                   'positional w/ optional flag')
            parser_def.set_defaults(default_from_file=123)
            cls.parser = parser_def.get_parser(env=cls.env)
 def test_delete_removes_definition(self):
     parser_def = ParserDefinition.create('test_script.py')
     json_data = argutil.load(parser_def.definitions_file)
     self.assertIn(parser_def.module, json_data['modules'])
     parser_def.delete()
     json_data = argutil.load(parser_def.definitions_file)
     self.assertNotIn(parser_def.module, json_data['modules'])
 def test_delete_removes_defaults(self):
     parser_def = ParserDefinition.create('test_script.py')
     parser_def.add_argument('--foo')
     parser_def.set_defaults(foo='bar')
     json_data = argutil.load(parser_def.defaults_file)
     self.assertIn(parser_def.module, json_data)
     parser_def.delete()
     json_data = argutil.load(parser_def.defaults_file)
     self.assertNotIn(parser_def.module, json_data)
Exemple #6
0
    def test_submodule_option_defaults(self):
        json_data = {
            'modules': {
                'root': {
                    'modules': {
                        'command': {
                            'args': [{
                                'long': '--foo'
                            }]
                        }
                    }
                }
            }
        }
        with open(DEFINITIONS_FILE, 'w') as f:
            f.write(json.dumps(json_data))
        parser_def = ParserDefinition('root.py')
        parser = parser_def.get_parser()
        opts = parser.parse_args(['command'])
        self.assertIsNone(opts.foo)

        parser_def.set_defaults(**{'command.foo': 'bar'})
        parser = parser_def.get_parser()
        opts = parser.parse_args(['command'])
        self.assertEqual(opts.foo, 'bar')
 def test_create_appends_to_existing_definitions_file(self):
     base_data = {
         'modules': {
             'existing_module': {
                 'examples': [],
                 'args': []
             }
         }
     }
     self.create_json_file(DEFINITIONS_FILE, base_data)
     ParserDefinition.create('test_script.py', DEFINITIONS_FILE)
     expected = {
         'modules': {
             'existing_module': {
                 'examples': [],
                 'args': []
             },
             'test_script': {
                 'examples': [],
                 'args': []
             }
         }
     }
     self.assertDictEqual(argutil.load(DEFINITIONS_FILE), expected)
 def test_config_multiple_properties(self):
     parser_def = ParserDefinition.create('test_script.py')
     parser_def.config([
         "a=1", "b='2'", 'c="3"', "d=true", 'e=9.2', "f='false'", "g=False",
         "h=None", "i=null"
     ])
     expected = dict(a=1,
                     b='2',
                     c='3',
                     d=True,
                     e=9.2,
                     f='false',
                     g=False,
                     h=None,
                     i=None)
     self.assertDictEqual(parser_def.get_defaults(), expected)
 def test_error_missing_long_key(self):
     filename = 'bad_module.py'
     parser_def = ParserDefinition.create(filename)
     json_data = {
         'modules': {
             'bad_module': {
                 'examples': [],
                 'args': [{
                     'help': ['no help for you']
                 }]
             }
         }
     }
     argutil.save(json_data, DEFINITIONS_FILE)
     with self.assertRaises(ValidationError):
         parser_def.get_parser()
Exemple #10
0
import argutil
from argutil import (
    ParserDefinition,
    WorkingDirectory
)
from datetime import datetime
import os
import sys
from fnmatch import fnmatch
from .repl import Repl

parser_def = ParserDefinition()
argparser = None


def get_defaults():
    return [
        line.replace('init.', '')
        for line in parser_def.config()
    ]


def get_defaults_map():
    return {
        parts[0]: '='.join(parts[1:])
        for parts in (
            line.split('=') for line in get_defaults()
        )
    }

 def test_get_defaults_nonexistent_module(self):
     expected = {}
     parser_def = ParserDefinition.create('test_script.py')
     parser_def.set_defaults(foo='bar')
     parser_def2 = ParserDefinition.create('other_script.py')
     self.assertDictEqual(parser_def2.get_defaults(), expected)
 def test_init_error_on_bad_definitions_file(self):
     self.create_json_file(DEFINITIONS_FILE, {})
     with self.assertRaises(ValidationError):
         ParserDefinition.create('test_script.py', DEFINITIONS_FILE)
 def test_get_defaults_nonexistent_defaults_file(self):
     parser_def = ParserDefinition.create('test_script.py')
     self.assertDictEqual(parser_def.get_defaults(), {})
 def test_init_nonexistent_module(self):
     with self.assertRaises(SystemExit):
         ParserDefinition('test_script.py').get_parser()
 def test_get_defaults_existing_entries(self):
     expected = {'foo': 'bar', 'bar2': 'foo2'}
     parser_def = ParserDefinition.create('test_script.py')
     parser_def.set_defaults(foo='bar', bar2='foo2')
     self.assertDictEqual(parser_def.get_defaults(), expected)
 def test_create_error_existing_module(self):
     filename = 'test_script.py'
     argutil.ParserDefinition.create(filename)
     with self.assertRaises(KeyError):
         ParserDefinition.create(filename)
 def test_config_single_property(self):
     parser_def = ParserDefinition.create('test_script.py')
     parser_def.config(['foo=bar'])
     expected = {'foo': 'bar'}
     self.assertDictEqual(parser_def.get_defaults(), expected)
 def test_config_has_nested_defaults(self):
     parser_def = ParserDefinition.create('test_script.py')
     parser_def.set_defaults(**{"foo.bar.fee": "bar"})
     current = parser_def.config()
     expected = ['foo.bar.fee=bar']
     self.assertCollectionEqual(current, expected)
 def test_config_fetch_has_defaults(self):
     parser_def = ParserDefinition.create('test_script.py')
     parser_def.set_defaults(foo='bar', bar='foo')
     current = parser_def.config()
     expected = ['foo=bar', 'bar=foo']
     self.assertCollectionEqual(current, expected)
 def test_config_fetch_no_defaults(self):
     parser_def = ParserDefinition.create('test_script.py')
     current = parser_def.config()
     expected = []
     self.assertEqual(current, expected)
 def test_error_unknown_type(self):
     filename = 'bad_module.py'
     parser_def = ParserDefinition.create(filename)
     parser_def.add_argument('unknown_type', type='shoe')
     with self.assertRaises(KeyError):
         parser_def.get_parser()
 def test_set_defaults_creates_file_if_nonexistent(self):
     self.assertIs(os.path.isfile(DEFAULTS_FILE), False)
     ParserDefinition.create('test_script.py').set_defaults()
     self.assertIs(os.path.isfile(DEFAULTS_FILE), True)
 def test_config_list_property(self):
     parser_def = ParserDefinition.create('test_script.py')
     parser_def.config(['foo=[1, "2", \'3\', true, false, none, null]'])
     expected = {'foo': [1, '2', '3', True, False, None, None]}
     self.assertDictEqual(parser_def.get_defaults(), expected)
 def test_get_defaults(self):
     expected = {}
     parser_def = ParserDefinition.create('test_script.py')
     parser_def.set_defaults()
     self.assertDictEqual(parser_def.get_defaults(), expected)