Beispiel #1
0
 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())
Beispiel #2
0
 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())
Beispiel #3
0
    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
            )
Beispiel #4
0
    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
            )
Beispiel #5
0
    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())
Beispiel #6
0
    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()
        )
Beispiel #7
0
    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()
        )
Beispiel #8
0
    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)
Beispiel #9
0
    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)
Beispiel #10
0
    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_)
        )
Beispiel #11
0
    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)
Beispiel #12
0
    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)
Beispiel #13
0
 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
         )
Beispiel #14
0
    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'))
Beispiel #15
0
    def test_init(self):
        sys.argv = ['cli.py', 'foo']
        input_ = ArgvInput()

        self.assertEqual(
            ['foo'],
            input_._ArgvInput__tokens
        )
        self.assertEqual(
            ['cli.py', 'foo'],
            sys.argv
        )
Beispiel #16
0
    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())
Beispiel #17
0
    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())
Beispiel #18
0
 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))
Beispiel #19
0
    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())
Beispiel #20
0
    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()
        )
Beispiel #21
0
    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())
Beispiel #22
0
    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()
        )
Beispiel #23
0
    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())
Beispiel #24
0
    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'))
Beispiel #25
0
 def test_parse_single_dash_argument(self):
     input_ = ArgvInput(['cli.py', '-'])
     input_.bind(InputDefinition([
         InputArgument('file')
     ]))
     self.assertEqual({'file': '-'}, input_.get_arguments())
Beispiel #26
0
 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))
Beispiel #27
0
def main():
    application = Application("mlcli", __version__)
    application.add(InfoCommand())
    application.run(ArgvInput(), ConsoleOutput())
Beispiel #28
0
 def test_parse_single_dash_argument(self):
     input_ = ArgvInput(['cli.py', '-'])
     input_.bind(InputDefinition([
         InputArgument('file')
     ]))
     self.assertEqual({'file': '-'}, input_.get_arguments())
Beispiel #29
0
 def _run(self, cmd):
     i = ArgvInput(["poetry -v"] + cmd)
     self._application.run(i)