Ejemplo n.º 1
0
    def test_setup_plugin_options(self):
        session = Mock()
        plugin = Mock(module="plugin")
        parser = argparse.ArgumentParser()
        parser.add_argument("--foo-foo", default=123)

        session.plugins = {"plugin": plugin}
        session.set_plugin_option = lambda name, key, value: session.plugins[name].options.update({key: value})
        plugin.arguments = Arguments(
            Argument("foo-foo", is_global=True),
            Argument("bar-bar", default=456),
            Argument("baz-baz", default=789, help=argparse.SUPPRESS)
        )

        with patch("streamlink_cli.main.args") as args:
            args.foo_foo = 321
            args.plugin_bar_bar = 654
            args.plugin_baz_baz = 987  # this wouldn't be set by the parser if the argument is suppressed

            setup_plugin_args(session, parser)
            self.assertEqual(plugin.options.get("foo_foo"), 123, "Sets the global-argument's default value")
            self.assertEqual(plugin.options.get("bar_bar"), 456, "Sets the plugin-argument's default value")
            self.assertEqual(plugin.options.get("baz_baz"), 789, "Sets the suppressed plugin-argument's default value")

            setup_plugin_options(session, plugin)
            self.assertEqual(plugin.options.get("foo_foo"), 321, "Sets the provided global-argument value")
            self.assertEqual(plugin.options.get("bar_bar"), 654, "Sets the provided plugin-argument value")
            self.assertEqual(plugin.options.get("baz_baz"), 789, "Doesn't set values of suppressed plugin-arguments")
Ejemplo n.º 2
0
    def test_setup_plugin_args(self):
        session = Mock()
        plugin = Mock()
        parser = argparse.ArgumentParser()
        parser.add_argument("--global-arg1", default=123)
        parser.add_argument("--global-arg2", default=456)

        session.plugins = {"mock": plugin}
        plugin.arguments = Arguments(
            Argument("global-arg1", is_global=True),
            Argument("test1", default="default1"),
            Argument("test2", default="default2"),
            Argument("test3")
        )

        setup_plugin_args(session, parser)

        group = next((group for group in parser._action_groups if group.title == "Plugin options"), None)
        self.assertIsNotNone(group, "Adds the 'Plugin options' arguments group")
        self.assertEqual(
            [item for action in group._group_actions for item in action.option_strings],
            ["--mock-test1", "--mock-test2", "--mock-test3"],
            "Only adds plugin arguments and ignores global argument references"
        )

        self.assertEqual(plugin.options.get("global-arg1"), 123)
        self.assertEqual(plugin.options.get("global-arg2"), None)
        self.assertEqual(plugin.options.get("test1"), "default1")
        self.assertEqual(plugin.options.get("test2"), "default2")
        self.assertEqual(plugin.options.get("test3"), None)
Ejemplo n.º 3
0
def cli_main(output):

    error_code = 0
    parser = cli.build_parser()

    cli.setup_args(parser, ignore_unknown=True)
    cli.args.output = output
    cli.args.url = 'https://pccold'
    cli.args.stream = ['default']
    # print(cli.args)

    # Console output should be on stderr if we are outputting
    # a stream to stdout.
    if cli.args.stdout or cli.args.output == "-":
        console_out = sys.stderr
    else:
        console_out = sys.stdout

    # We don't want log output when we are printing JSON or a command-line.
    silent_log = any(getattr(cli.args, attr) for attr in cli.QUIET_OPTIONS)
    log_level = cli.args.loglevel if not silent_log else "none"
    cli.setup_logging(console_out, log_level)
    cli.setup_console(console_out)

    cli.setup_streamlink()
    cli.setup_plugin_args(cli.streamlink, parser)
    path = os.path.abspath(os.path.dirname(__file__))[:-6] + 'plugins'
    print('dir', path)
    cli.load_plugins([path])

    # update the logging level if changed by a plugin specific config
    log_level = cli.args.loglevel if not silent_log else "none"
    cli.logger.root.setLevel(log_level)

    cli.setup_http_session()

    try:
        cli.setup_options()
        cli.handle_url()
    except KeyboardInterrupt:
        # Close output
        if cli.output:
            cli.output.close()
        cli.console.msg("Interrupted! Exiting...")
        error_code = 130
    finally:
        if cli.stream_fd:
            try:
                cli.log.info("Closing currently open stream...")
                cli.stream_fd.close()
            except KeyboardInterrupt:
                error_code = 130

    sys.exit(error_code)
Ejemplo n.º 4
0
    def test_arguments(self):
        from streamlink_cli.main import setup_plugin_args
        session = Streamlink()
        parser = MagicMock()
        group = parser.add_argument_group("Plugin Options").add_argument_group("UStreamTV")

        session.plugins = {
            'ustreamtv': UStreamTV
        }

        setup_plugin_args(session, parser)

        group.add_argument.assert_called_with('--ustream-password', metavar="PASSWORD", help=ANY)
Ejemplo n.º 5
0
    def test_arguments(self):
        from streamlink_cli.main import setup_plugin_args
        session = Streamlink()
        parser = MagicMock()
        plugin_parser = MagicMock()
        parser.add_argument_group = MagicMock(return_value=plugin_parser)

        session.plugins = {
            'ustreamtv': UStreamTV
        }

        setup_plugin_args(session, parser)

        plugin_parser.add_argument.assert_called_with('--ustream-password', metavar="PASSWORD", help=ANY)
Ejemplo n.º 6
0
    def test_set_defaults(self):
        session = Mock()
        plugin = Mock()
        parser = Mock()

        session.plugins = {"mock": plugin}
        plugin.arguments = Arguments(Argument("test1", default="default1"),
                                     Argument("test2", default="default2"),
                                     Argument("test3"))

        setup_plugin_args(session, parser)

        self.assertEqual(plugin.options.get("test1"), "default1")
        self.assertEqual(plugin.options.get("test2"), "default2")
        self.assertEqual(plugin.options.get("test3"), None)
Ejemplo n.º 7
0
    def test_set_defaults(self):
        session = Mock()
        plugin = Mock()
        parser = Mock()

        session.plugins = {"mock": plugin}
        plugin.arguments = Arguments(
            Argument("test1", default="default1"),
            Argument("test2", default="default2"),
            Argument("test3")
        )

        setup_plugin_args(session, parser)

        self.assertEqual(plugin.options.get("test1"), "default1")
        self.assertEqual(plugin.options.get("test2"), "default2")
        self.assertEqual(plugin.options.get("test3"), None)
Ejemplo n.º 8
0
    def test_arguments(self):
        from streamlink_cli.main import setup_plugin_args
        session = Streamlink()
        parser = MagicMock()
        plugin_parser = MagicMock()
        parser.add_argument_group = MagicMock(return_value=plugin_parser)

        session.plugins = {
            'tvplayer': TVPlayer
        }

        setup_plugin_args(session, parser)

        self.assertSequenceEqual(plugin_parser.add_argument.mock_calls,
                                 [call('--tvplayer-email', metavar="EMAIL", help=ANY),
                                  call('--tvplayer-password', metavar="PASSWORD", help=ANY)],
                                 )
Ejemplo n.º 9
0
    def test_arguments(self):
        from streamlink_cli.main import setup_plugin_args
        session = Streamlink()
        parser = MagicMock()
        plugin_parser = MagicMock()
        parser.add_argument_group = MagicMock(return_value=plugin_parser)

        session.plugins = {'funimationnow': FunimationNow}

        setup_plugin_args(session, parser)

        self.assertSequenceEqual(plugin_parser.add_argument.mock_calls, [
            call('--funimation-language',
                 choices=["en", "ja", "english", "japanese"],
                 default="english",
                 help=ANY),
            call('--funimation-mux-subtitles', action="store_true", help=ANY)
        ])
Ejemplo n.º 10
0
    def test_arguments(self):
        from streamlink_cli.main import setup_plugin_args
        session = Streamlink()
        parser = MagicMock()
        plugin_parser = MagicMock()
        parser.add_argument_group = MagicMock(return_value=plugin_parser)

        session.plugins = {'tvplayer': TVPlayer}

        setup_plugin_args(session, parser)

        self.assertSequenceEqual(
            plugin_parser.add_argument.mock_calls,
            [
                call('--tvplayer-email', metavar="EMAIL", help=ANY),
                call('--tvplayer-password', metavar="PASSWORD", help=ANY)
            ],
        )
Ejemplo n.º 11
0
    def test_arguments(self):
        from streamlink_cli.main import setup_plugin_args
        session = Streamlink()
        parser = MagicMock()
        group = parser.add_argument_group("Plugin Options").add_argument_group(
            "FunimationNow")

        session.plugins = {'funimationnow': FunimationNow}

        setup_plugin_args(session, parser)
        self.assertSequenceEqual(group.add_argument.mock_calls, [
            call('--funimation-email', help=ANY),
            call('--funimation-password', help=ANY),
            call('--funimation-language',
                 choices=["en", "ja", "english", "japanese"],
                 default="english",
                 help=ANY)
        ])
Ejemplo n.º 12
0
    def test_arguments(self):
        from streamlink_cli.main import setup_plugin_args
        session = Streamlink()
        parser = MagicMock()
        plugin_parser = MagicMock()
        parser.add_argument_group = MagicMock(return_value=plugin_parser)

        session.plugins = {
            'funimationnow': FunimationNow
        }

        setup_plugin_args(session, parser)

        self.assertSequenceEqual(plugin_parser.add_argument.mock_calls,
                                 [call('--funimation-language',
                                       choices=["en", "ja", "english", "japanese"],
                                       default="english", help=ANY),
                                  call('--funimation-mux-subtitles', action="store_true", help=ANY)])