def test_ActionJsonSchema(self): parser = ArgumentParser(prog='app', default_meta=False, error_handler=None) parser.add_argument('--op1', action=ActionJsonSchema(schema=schema1)) parser.add_argument('--op2', action=ActionJsonSchema(schema=schema2)) parser.add_argument('--op3', action=ActionJsonSchema(schema=schema3)) parser.add_argument('--cfg', action=ActionConfigFile) op1_val = [1, 2, 3, 4] op2_val = {'k1': 'one', 'k2': 2, 'k3': 3.3} self.assertEqual(op1_val, parser.parse_args(['--op1', str(op1_val)]).op1) self.assertRaises(ParserError, lambda: parser.parse_args(['--op1', '[1, "two"]'])) self.assertRaises(ParserError, lambda: parser.parse_args(['--op1', '[1.5, 2]'])) self.assertEqual(op2_val, parser.parse_args(['--op2', str(op2_val)]).op2) self.assertEqual(17, parser.parse_args(['--op2', '{"k2": 2}']).op2['k3']) self.assertRaises(ParserError, lambda: parser.parse_args(['--op2', '{"k1": 1}'])) self.assertRaises(ParserError, lambda: parser.parse_args(['--op2', '{"k2": "2"}'])) self.assertRaises(ParserError, lambda: parser.parse_args(['--op2', '{"k4": 4}'])) op1_file = os.path.join(self.tmpdir, 'op1.json') op2_file = os.path.join(self.tmpdir, 'op2.json') cfg1_file = os.path.join(self.tmpdir, 'cfg1.yaml') cfg3_file = os.path.join(self.tmpdir, 'cfg3.yaml') cfg2_str = 'op1:\n '+str(op1_val)+'\nop2:\n '+str(op2_val)+'\n' with open(op1_file, 'w') as f: f.write(str(op1_val)) with open(op2_file, 'w') as f: f.write(str(op2_val)) with open(cfg1_file, 'w') as f: f.write('op1:\n '+op1_file+'\nop2:\n '+op2_file+'\n') with open(cfg3_file, 'w') as f: f.write('op3:\n n1:\n - '+str(op2_val)+'\n') cfg = parser.parse_path(cfg1_file) self.assertEqual(op1_val, cfg['op1']) self.assertEqual(op2_val, cfg['op2']) cfg = parser.parse_string(cfg2_str) self.assertEqual(op1_val, cfg['op1']) self.assertEqual(op2_val, cfg['op2']) cfg = parser.parse_args(['--cfg', cfg3_file]) self.assertEqual(op2_val, cfg.op3['n1'][0]) parser.check_config(cfg, skip_none=True) if os.name == 'posix' and platform.python_implementation() == 'CPython': os.chmod(op1_file, 0) self.assertRaises(ParserError, lambda: parser.parse_path(cfg1_file))
def read_config(args: Optional[List[str]]) -> SimpleNamespace: """ Parse command line arguments and return a JSON object. :returns: benchmark configuration. """ parser = ArgumentParser() parser.add_argument("config", action=ActionJsonSchema(schema=SCHEMA), help="%s") config = parser.parse_args(args).config return config
def test_ActionJsonSchema_help(self): parser = ArgumentParser() parser.add_argument('--op1', action=ActionJsonSchema(schema=schema1), help='schema: %s') out = StringIO() parser.print_help(out) outval = out.getvalue() schema = re.sub('^.*schema:([^()]+)[^{}]*$', r'\1', outval.replace('\n', ' ')) self.assertEqual(schema1, json.loads(schema))
def read_config(args: Optional[List[str]]) -> SimpleNamespace: """ Parse command line arguments and return a JSON object. :returns: benchmark configuration. """ parser = ArgumentParser() parser.add_argument("config", action=ActionJsonSchema(schema=SCHEMA), help="%s") config = parser.parse_args(args).config # default num_warmup to half of num_sample if not hasattr(config, "num_warmup"): config.num_warmup = config.iterations // 2 return config
def get_config(args_list=None): """ """ # load and validate config file parser = argparse.ArgumentParser() parser.add_argument('config', action=ActionJsonSchema(schema=schema)) parser.add_argument('updates', nargs='*') args = parser.parse_args(args_list) args = namespace_to_dict(args) # convert config to json-serializable dict object config = args['config'] if '__path__' in config: config = {**config, '__path__': config['__path__'].abs_path} config = json.loads(json.dumps(config), cls=ScientificNotationDecoder) # update config in-place with commandline arguments update_config(config, args['updates']) return config
def test_parser_mode_jsonnet(self): parser = ArgumentParser(parser_mode='jsonnet', error_handler=None) parser.add_argument('--cfg', action=ActionConfigFile) parser.add_argument('--param', type=int) parser.add_argument('--records', action=ActionJsonSchema(schema=records_schema)) jsonnet_file = os.path.join(self.tmpdir, 'example.jsonnet') with open(jsonnet_file, 'w') as output_file: output_file.write(example_1_jsonnet) cfg = parser.parse_args(['--cfg', jsonnet_file]) self.assertEqual(654, cfg.param) self.assertEqual(9, len(cfg.records)) self.assertEqual('#8', cfg.records[-2]['ref']) self.assertEqual(15.5, cfg.records[-2]['val']) self.assertRaises(ParserError, lambda: parser.parse_args(['--cfg', '{}}']))
def test_ActionJsonSchema_failures(self): self.assertRaises(ValueError, lambda: ActionJsonSchema()) self.assertRaises(ValueError, lambda: ActionJsonSchema(schema=':'+json.dumps(schema1)))
def get_config_parser(): """Returns a ModuleArchitectureRenderer configuration parser.""" parser = ModuleArchitecture.get_config_parser() parser.description = ModuleArchitectureRenderer.__doc__ # render options # group_render = parser.add_argument_group('Rendering related options') group_render.add_argument( '--save_pdf', default=False, type=bool, help='Whether to write rendered pdf file to output directory.') group_render.add_argument( '--save_gv', default=False, type=bool, help='Whether to write graphviz file to output directory.') group_render.add_argument( '--block_attrs', default={ 'Default': 'shape=box', 'Input': 'shape=box, style=rounded, penwidth=1.5', 'Output': 'shape=box, style=rounded, peripheries=2', 'Nested': 'shape=box, style=dashed', 'Shared': 'style=filled', 'Reshape': 'shape=hexagon', 'Identity': 'shape=circle, width=0', 'Add': 'shape=circle, margin=0, width=0' }, action=ActionJsonSchema(schema={ 'type': 'object', 'items': { 'type': 'string' } }), help='Attributes for block nodes.') group_render.add_argument( '--block_labels', default={ 'Identity': '', 'Add': '+' }, action=ActionJsonSchema(schema={ 'type': 'object', 'items': { 'type': 'string' } }), help='Fixed labels for block nodes.') group_render.add_argument('--edge_attrs', default='fontsize=10', help='Attributes for edges.') group_render.add_argument( '--nested_depth', default=3, action=ActionOperators(expr=('>=', 0)), help= 'Maximum depth for nested subblocks to render. Set to 0 for unlimited.' ) group_render.add_argument( '--full_ids', default=False, type=bool, help='Whether block IDs should include parent prefix.') group_render.add_argument( '--layout_prog', choices=['dot', 'neato', 'twopi', 'circo', 'fdp'], default='dot', help='The graphviz layout method to use.') return parser