From c839bf0dea046e391d97f39cc48ecd168f5fad7b Mon Sep 17 00:00:00 2001 From: Alicja Miloszewska Date: Thu, 9 Jan 2025 09:11:07 +0100 Subject: [PATCH] [Py OV] Fix openvino.Model mocked object parameters (#28313) ### Details: - Overload `dir()` method for class objects. Add meta class `ModelMeta` and overload `dir()` - Add test for checking model attributes usind `dir()` ### Tickets: - [CVS-160178](https://jira.devtools.intel.com/browse/CVS-160178) --------- Signed-off-by: Alicja Miloszewska --- src/bindings/python/src/openvino/_ov_api.py | 11 ++++++++++- src/bindings/python/tests/test_runtime/test_model.py | 8 ++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/bindings/python/src/openvino/_ov_api.py b/src/bindings/python/src/openvino/_ov_api.py index da31fab4c95d8e..4d7c349b03167e 100644 --- a/src/bindings/python/src/openvino/_ov_api.py +++ b/src/bindings/python/src/openvino/_ov_api.py @@ -22,7 +22,12 @@ ) -class Model: +class ModelMeta(type): + def __dir__(cls) -> list: + return list(set(cls.__dict__.keys()) | set(dir(ModelBase))) + + +class Model(object, metaclass=ModelMeta): def __init__(self, *args: Any, **kwargs: Any) -> None: if args and not kwargs: if isinstance(args[0], ModelBase): @@ -65,6 +70,10 @@ def __exit__(self, exc_type: Type[BaseException], exc_value: BaseException, trac def __repr__(self) -> str: return self.__model.__repr__() + def __dir__(self) -> list: + wrapper_methods = ["__copy__", "__deepcopy__", "__dict__", "__enter__", "__exit__", "__getattr__", "__weakref__"] + return dir(self.__model) + wrapper_methods + class InferRequest(_InferRequestWrapper): """InferRequest class represents infer request which can be run in asynchronous or synchronous manners.""" diff --git a/src/bindings/python/tests/test_runtime/test_model.py b/src/bindings/python/tests/test_runtime/test_model.py index 425cdb97129c69..cf4cad0d025247 100644 --- a/src/bindings/python/tests/test_runtime/test_model.py +++ b/src/bindings/python/tests/test_runtime/test_model.py @@ -849,3 +849,11 @@ def test_tempdir_save_load_error(): with tempfile.TemporaryDirectory() as model_save_dir: save_model(mem_model, f"{model_save_dir}/model.xml") _ = Core().read_model(f"{model_save_dir}/model.xml") + + +def test_model_dir(): + model = generate_add_model() + num_of_attrs = 83 + + assert type(dir(model)) == list + assert len(dir(model)) >= num_of_attrs