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")
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)
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)
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)
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)
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)
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)
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)], )
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) ])
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) ], )
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) ])
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)])