diff --git a/tools/mo/openvino/tools/mo/main.py b/tools/mo/openvino/tools/mo/main.py index a78ce44b31f..d4d62135f49 100644 --- a/tools/mo/openvino/tools/mo/main.py +++ b/tools/mo/openvino/tools/mo/main.py @@ -27,13 +27,17 @@ from openvino.runtime import serialize def main(cli_parser: argparse.ArgumentParser, framework=None): - argv = cli_parser.parse_args() - argv.model_name = get_model_name_from_args(argv) - argv = vars(argv) - # Initialize logger with 'ERROR' as default level to be able to form nice messages # before arg parser deliver log_level requested by user init_logger('ERROR', False) + logger = log.getLogger() + # Disable logging for parse_args() as inner convert runs parse_args() second time + # which result in duplicating of warnings + logger.disabled = True + argv = cli_parser.parse_args() + logger.disabled = False + argv.model_name = get_model_name_from_args(argv) + argv = vars(argv) if framework is not None: argv['framework'] = framework diff --git a/tools/mo/unit_tests/mo/frontend_ngraph_test.py b/tools/mo/unit_tests/mo/frontend_ngraph_test.py index 24cc8e215f9..34a6582dc8a 100644 --- a/tools/mo/unit_tests/mo/frontend_ngraph_test.py +++ b/tools/mo/unit_tests/mo/frontend_ngraph_test.py @@ -61,6 +61,21 @@ def test_main_test(): assert not status.returncode +def test_main_error_log(): + setup_env() + args = [sys.executable, + os.path.join(os.path.dirname(__file__), 'main_test_error_log.py')] + + status = subprocess.run(args, env=os.environ, capture_output=True) + test_log = status.stderr.decode("utf-8").replace("\r\n", "\n") + + # Check that log has exactly one warning from parse_args and + # exactly one error message "FW ERROR" + ref_log = "[ WARNING ] warning\n[ FRAMEWORK ERROR ] FW ERROR MESSAGE\n" + + assert test_log == ref_log + + def test_mo_extensions_test(): setup_env() args = [sys.executable, '-m', 'pytest', diff --git a/tools/mo/unit_tests/mo/main_test_error_log.py b/tools/mo/unit_tests/mo/main_test_error_log.py new file mode 100644 index 00000000000..4e2d7893fe6 --- /dev/null +++ b/tools/mo/unit_tests/mo/main_test_error_log.py @@ -0,0 +1,27 @@ +# Copyright (C) 2018-2022 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import argparse +from unittest.mock import patch + +from openvino.tools.mo.utils.error import FrameworkError + + +def mocked_parse_args(*argv): + # Mock parse_args method which generates warning + import logging as log + log.error("warning", extra={'is_warning': True}) + argv = argparse.Namespace() + return argv + + +@patch('argparse.ArgumentParser.parse_args', mocked_parse_args) +@patch('openvino.tools.mo.convert_impl.driver', side_effect=FrameworkError('FW ERROR MESSAGE')) +def run_main(mock_driver): + from openvino.tools.mo.main import main + # runs main() method where driver() raises FrameworkError + main(argparse.ArgumentParser()) + + +if __name__ == "__main__": + run_main()