def test_askpass(self, mock_getpass: Mock): def getpass(prompt, stream): stream.write(prompt) return "hello" output = StringIO() console = ConsoleOutput(output) mock_getpass.side_effect = getpass self.assertEqual("hello", console.askpass("test: ")) self.assertEqual("test: ", output.getvalue())
def setup_console(output): """Console setup.""" global console # All console related operations is handled via the ConsoleOutput class console = ConsoleOutput(output, streamlink) console.json = args.json # Handle SIGTERM just like SIGINT signal.signal(signal.SIGTERM, signal.default_int_handler)
def test_msg_json_merge_object(self): output = StringIO() console = ConsoleOutput(output, json=True) test_obj1 = {"test": 1, "foo": "foo"} test_obj2 = Mock(__json__=Mock(return_value={"test": 2})) console.msg_json(test_obj1, test_obj2, ["qux"], foo="bar", baz="qux") self.assertEqual( '{\n' ' "test": 2,\n' ' "foo": "bar",\n' ' "baz": "qux"\n' '}\n', output.getvalue()) self.assertEqual([("test", 1), ("foo", "foo")], list(test_obj1.items()))
def setup_logger_and_console(stream=sys.stdout, filename=None, level="info", json=False): global console if filename == "-": filename = LOG_DIR / datetime.datetime.now().strftime( "%Y-%m-%d_%H-%M-%S.log") elif filename: filename = Path(filename).expanduser().resolve() if filename: filename.parent.mkdir(parents=True, exist_ok=True) streamhandler = logger.basicConfig( stream=stream, filename=filename, level=level, style="{", format=("[{asctime}]" if level == "trace" else "") + "[{name}][{levelname}] {message}", datefmt="%H:%M:%S" + (".%f" if level == "trace" else "")) console = ConsoleOutput(streamhandler.stream, json)
def setup_logger_and_console(stream=sys.stdout, filename=None, level="info", json=False): global console if filename == "-": if not os.path.isdir(LOG_DIR): os.makedirs(LOG_DIR) filename = os.path.join( LOG_DIR, datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S.log")) elif filename: filename = os.path.expanduser(filename) head = os.path.dirname(filename) if head and not os.path.isdir(head): os.makedirs(head) streamhandler = logger.basicConfig( stream=stream, filename=filename, level=level, style="{", format=("[{asctime},{msecs:03.0f}]" if level == "trace" else "") + "[{name}][{levelname}] {message}", datefmt="%H:%M:%S") console = ConsoleOutput(streamhandler.stream, streamlink, json)
def test_msg_json_merge_list(self): output = StringIO() console = ConsoleOutput(output, json=True) test_list1 = ["foo", "bar"] test_list2 = Mock(__json__=Mock(return_value={"foo": "bar"})) console.msg_json(test_list1, ["baz"], test_list2, {"foo": "bar"}, foo="bar", baz="qux") self.assertEqual( '[\n' ' "foo",\n' ' "bar",\n' ' "baz",\n' ' {\n "foo": "bar"\n },\n' ' {\n "foo": "bar"\n },\n' ' {\n "foo": "bar",\n "baz": "qux"\n }\n' ']\n', output.getvalue()) self.assertEqual(["foo", "bar"], test_list1)
def test_msg_json_object(self): output = StringIO() test_obj = _TestObj() console = ConsoleOutput(output, json=True) console.msg_json(test_obj) self.assertEqual('''{\n "test": 1\n}\n''', output.getvalue())
def test_msg_json(self): output = StringIO() console = ConsoleOutput(output, json=True) console.msg_json({"test": 1}) self.assertEqual('''{\n "test": 1\n}\n''', output.getvalue())
def test_msg_json_not_set(self): output = StringIO() console = ConsoleOutput(output) self.assertEqual(None, console.msg_json({"test": 1})) self.assertEqual("", output.getvalue())
def test_msg_format_kw(self): output = StringIO() console = ConsoleOutput(output) console.msg("{test} - {what}", test=1, what=2) self.assertEqual("1 - 2\n", output.getvalue())
def test_msg_format(self): output = StringIO() console = ConsoleOutput(output) console.msg("{0} - {1}", 1, 2) self.assertEqual("1 - 2\n", output.getvalue())
def test_msg_json_list(self): output = StringIO() console = ConsoleOutput(output, json=True) test_list = ["foo", "bar"] console.msg_json(test_list) self.assertEqual('[\n "foo",\n "bar"\n]\n', output.getvalue())
def test_exit_json(self, mock_exit): output = StringIO() console = ConsoleOutput(output, json=True) console.exit("error") self.assertEqual('''{\n "error": "error"\n}\n''', output.getvalue()) mock_exit.assert_called_with(1)
def test_ask_no_tty(self, isatty, input, stderr): isatty.return_value = False self.assertEqual("", ConsoleOutput.ask("test: ")) input.assert_not_called() stderr.write.assert_not_called()
def test_ask_input_exception(self): output = StringIO() console = ConsoleOutput(output) self.assertIsNone(console.ask("test: ")) self.assertEqual("test: ", output.getvalue())
def test_ask(self): output = StringIO() console = ConsoleOutput(output) self.assertEqual("hello", console.ask("test: ")) self.assertEqual("test: ", output.getvalue())
def test_msg(self): output = StringIO() console = ConsoleOutput(output) console.msg("foo") console.msg_json({"test": 1}) self.assertEqual("foo\n", output.getvalue())
def test_askpass_no_tty(self): output = StringIO() console = ConsoleOutput(output) self.assertIsNone(console.askpass("test: "))
def test_msg_json_error(self, mock_exit): output = StringIO() console = ConsoleOutput(output, json=True) console.msg_json({"error": "bad"}) self.assertEqual('''{\n "error": "bad"\n}\n''', output.getvalue()) mock_exit.assert_called_with(1)
def test_askpass(self, isatty, getpass): isatty.return_value = True getpass.return_value = "hello" self.assertEqual("hello", ConsoleOutput.askpass("test: "))
def test_exit(self, mock_exit): output = StringIO() console = ConsoleOutput(output) console.exit("error") self.assertEqual("error: error\n", output.getvalue()) mock_exit.assert_called_with(1)
def test_ask_no_tty(self, mock_input: Mock): output = StringIO() console = ConsoleOutput(output) self.assertIsNone(console.ask("test: ")) self.assertEqual("", output.getvalue()) mock_input.assert_not_called()
def test_ask(self, isatty, input, stderr): input.return_value = "hello" isatty.return_value = True self.assertEqual("hello", ConsoleOutput.ask("test: ")) stderr.write.assert_called_with("test: ")
def test_msg_json_object(self): output = StringIO() console = ConsoleOutput(output, json=True) console.msg_json(Mock(__json__=Mock(return_value={"test": 1}))) self.assertEqual('{\n "test": 1\n}\n', output.getvalue())
def test_ask_input_exception(self, isatty, input, stderr): isatty.return_value = True input.side_effect = ValueError self.assertEqual("", ConsoleOutput.ask("test: ")) stderr.write.assert_called_with("test: ")
def test_set_level(self): session = Mock() console = ConsoleOutput(Mock(), session) console.set_level("debug") session.set_loglevel.assert_called_with("debug")
def test_askpass_no_tty(self, isatty): isatty.return_value = False self.assertEqual("", ConsoleOutput.askpass("test: "))
def test_msg_format(self): output = StringIO() console = ConsoleOutput(output) console.msg("foo") self.assertEqual("foo\n", output.getvalue())