Fix of double printing of errors in MO (#14224)

* Fix of double printing of errors.

* Added log test.

* Small correction.

* Test fix.
This commit is contained in:
Anastasiia Pnevskaia 2022-12-07 15:27:16 +01:00 committed by GitHub
parent 3dceb7c3bb
commit 20bd062d5e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 50 additions and 4 deletions

View File

@ -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

View File

@ -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',

View File

@ -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()