def test_parse_empty_string_argument(self): input_ = ArgvInput(['cli.py', '-f', 'bar', '']) input_.bind(InputDefinition([ InputArgument('empty'), InputOption('foo', 'f', InputOption.VALUE_OPTIONAL) ])) self.assertEqual({'empty': ''}, input_.get_arguments())
def test_parse_options(self): for argv, options, expected_options, message in self.provide_options(): input_ = ArgvInput(argv) input_.bind(InputDefinition(options)) self.assertEqual( expected_options, input_.get_options(), msg=message )
def test_parse_arguments(self): input_ = ArgvInput(['cli.py', 'foo']) input_.bind( InputDefinition([ InputArgument('name') ]) ) self.assertEqual({'name': 'foo'}, input_.get_arguments()) # parse is stateless self.assertEqual({'name': 'foo'}, input_.get_arguments())
def test_parse_list_argument(self): input_ = ArgvInput(['cli.py', 'foo', 'bar', 'baz', 'bat']) input_.bind( InputDefinition([ InputArgument('name', InputArgument.IS_LIST) ]) ) self.assertEqual( {'name': ['foo', 'bar', 'baz', 'bat']}, input_.get_arguments() )
def run(self, i=None, o=None): # type: (...) -> int if i is None: i = ArgvInput() if o is None: o = ConsoleOutput() name = i.get_first_argument() if name in ['run', 'script']: self._skip_io_configuration = True i = RawArgvInput() return super(Application, self).run(i, o)
def run(self, i=None, o=None) -> int: if i is None: i = ArgvInput() if o is None: o = ConsoleOutput() name = i.get_first_argument() if name == 'run': self._skip_io_configuration = True i = RawArgvInput() return super().run(i, o)
def test_to_str(self): input_ = ArgvInput(['cli.py', '-f', 'foo']) self.assertEqual('-f foo', str(input_)) input_ = ArgvInput(['cli.py', '-f', '--bar=foo', 'a b c d', "A\nB'C"]) def escape(s): return "\\'".join("'" + p + "'" for p in s.split("'")) self.assertEqual( '-f --bar=foo ' + escape('a b c d') + ' ' + escape("A\nB'C"), str(input_) )
def run(self, i=None, o=None): # type: (...) -> int if i is None: i = ArgvInput() if o is None: o = ConsoleOutput() self._formatter.with_colors(o.is_decorated()) o.set_formatter(self._formatter) name = i.get_first_argument() if name in ["run", "script"]: self._skip_io_configuration = True i = RawArgvInput() return super(Application, self).run(i, o)
def test_invalid_input(self): for argv, definition, expected_exception_message in self.provide_invalid_input(): input_ = ArgvInput(argv) self.assertRaisesRegexp( Exception, expected_exception_message, input_.bind, definition )
def test_has_parameter_option(self): input_ = ArgvInput(['cli.py', '-f', 'foo']) self.assertTrue(input_.has_parameter_option('-f')) input_ = ArgvInput(['cli.py', '--foo', 'foo']) self.assertTrue(input_.has_parameter_option('--foo')) input_ = ArgvInput(['cli.py', 'foo']) self.assertFalse(input_.has_parameter_option('--foo')) input_ = ArgvInput(['cli.py', '--foo=bar']) self.assertTrue(input_.has_parameter_option('--foo'))
def test_init(self): sys.argv = ['cli.py', 'foo'] input_ = ArgvInput() self.assertEqual( ['foo'], input_._ArgvInput__tokens ) self.assertEqual( ['cli.py', 'foo'], sys.argv )
def test_negative_number_after_double_dash(self): input_ = ArgvInput(['cli.py', '--', '-1']) input_.bind( InputDefinition([ InputArgument('number') ]) ) self.assertEqual({'number': '-1'}, input_.get_arguments()) input_ = ArgvInput(['cli.py', '-f', 'bar', '--', '-1']) input_.bind( InputDefinition([ InputArgument('number'), InputOption('foo', 'f', InputOption.VALUE_OPTIONAL) ]) ) self.assertEqual({'foo': 'bar'}, input_.get_options()) self.assertEqual({'number': '-1'}, input_.get_arguments())
def test_get_parameter_option_equal_sign(self): for argv, key, expected in self.get_parameter_option_values(): input_ = ArgvInput(argv) self.assertEqual(expected, input_.get_parameter_option(key))
def test_get_first_argument(self): input_ = ArgvInput(['cli.py', '-fbbar']) self.assertEqual(None, input_.get_first_argument()) input_ = ArgvInput(['cli.py', '-fbbar', 'foo']) self.assertEqual('foo', input_.get_first_argument())
def test_parse_list_option(self): input_ = ArgvInput(['cli.py', '--name=foo', '--name=bar', '--name=baz']) input_.bind( InputDefinition([ InputOption('name', None, InputOption.VALUE_OPTIONAL | InputOption.VALUE_IS_LIST) ]) ) self.assertEqual( {'name': ['foo', 'bar', 'baz']}, input_.get_options() ) input_ = ArgvInput(['cli.py', '--name', 'foo', '--name', 'bar', '--name', 'baz']) input_.bind( InputDefinition([ InputOption('name', None, InputOption.VALUE_OPTIONAL | InputOption.VALUE_IS_LIST) ]) ) self.assertEqual( {'name': ['foo', 'bar', 'baz']}, input_.get_options() ) input_ = ArgvInput(['cli.py', '--name=foo', '--name=bar', '--name=']) input_.bind( InputDefinition([ InputOption('name', None, InputOption.VALUE_OPTIONAL | InputOption.VALUE_IS_LIST) ]) ) self.assertEqual( {'name': ['foo', 'bar', None]}, input_.get_options() ) input_ = ArgvInput(['cli.py', '--name', 'foo', '--name', 'bar', '--name', '--another-option']) input_.bind( InputDefinition([ InputOption('name', None, InputOption.VALUE_OPTIONAL | InputOption.VALUE_IS_LIST), InputOption('another-option', None, InputOption.VALUE_NONE) ]) ) self.assertEqual( {'name': ['foo', 'bar', None], 'another-option': True}, input_.get_options() )
def test_parse_single_dash_argument(self): input_ = ArgvInput(['cli.py', '-']) input_.bind(InputDefinition([ InputArgument('file') ])) self.assertEqual({'file': '-'}, input_.get_arguments())
def main(): application = Application("mlcli", __version__) application.add(InfoCommand()) application.run(ArgvInput(), ConsoleOutput())
def _run(self, cmd): i = ArgvInput(["poetry -v"] + cmd) self._application.run(i)