diff --git a/src/ansys/dpf/core/data_tree.py b/src/ansys/dpf/core/data_tree.py index 6db1312d0d..de6bf46e56 100644 --- a/src/ansys/dpf/core/data_tree.py +++ b/src/ansys/dpf/core/data_tree.py @@ -487,6 +487,18 @@ def __setattr__(self, key, value): return super.__setattr__(self, key, value) self.add({key: value}) + def __str__(self): + """Describe the entity. + + Returns + ------- + str + Description of the entity. + """ + from ansys.dpf.core.core import _description + + return _description(self._internal_obj, self._server) + def __del__(self): try: # needs a proper deleter only when real datatree and not dict diff --git a/src/ansys/dpf/core/generic_data_container.py b/src/ansys/dpf/core/generic_data_container.py index 485f3f7936..9ba7e5320a 100644 --- a/src/ansys/dpf/core/generic_data_container.py +++ b/src/ansys/dpf/core/generic_data_container.py @@ -6,6 +6,7 @@ """ import traceback import warnings +import builtins from ansys.dpf.core import server as server_module from ansys.dpf.core import errors @@ -110,31 +111,14 @@ def get_property(self, property_name): """ any_ptr = self._api.generic_data_container_get_property_any(self, property_name) any_dpf = Any(any_ptr, self._server) - output_type = self._type_to_output_method[self.get_property_description()[property_name]] - return any_dpf.cast(output_type) + output_type = self.get_property_description()[property_name] + class_ = getattr(builtins, output_type, None) + if class_ is None: + from ansys.dpf import core - @property - def _type_to_output_method(self): - # Only the types in any.py need to be casted - from ansys.dpf.core import ( - field, - property_field, - string_field, - scoping, - ) + class_ = getattr(core, output_type) - out = { - "bool": bool, - "int": int, - "str": str, - "float": float, - "Field": field.Field, - "PropertyField": property_field.PropertyField, - "StringField": string_field.StringField, - "Scoping": scoping.Scoping, - "GenericDataContainer": GenericDataContainer, - } - return out + return any_dpf.cast(class_) def get_property_description(self): """Get a dictionary description of properties by name and data type diff --git a/tests/test_data_tree.py b/tests/test_data_tree.py index d7e370e310..04db3b645c 100644 --- a/tests/test_data_tree.py +++ b/tests/test_data_tree.py @@ -235,6 +235,19 @@ def test_read_from_txt_data_tree(server_type): assert data_tree.has("list_string") +@conftest.raises_for_servers_version_under("4.0") +def test_print_data_tree(server_type): + data_tree = dpf.DataTree(server=server_type) + with data_tree.to_fill() as to_fill: + to_fill.int = 1 + to_fill.double = 1.0 + to_fill.string = "hello" + to_fill.list_int = [1, 2] + to_fill.list_double = [1.5, 2.5] + to_fill.add(list_string=["hello", "bye"]) + assert str(data_tree) != "" + + @conftest.raises_for_servers_version_under("4.0") def test_sub_data_tree(): data_tree = dpf.DataTree() diff --git a/tests/test_generic_data_container.py b/tests/test_generic_data_container.py index 1a35105398..c16b701f3a 100644 --- a/tests/test_generic_data_container.py +++ b/tests/test_generic_data_container.py @@ -32,7 +32,7 @@ def test_set_get_data_tree_generic_data_container(server_type): entity = dpf.DataTree(server=server_type) entity.add(name="john") gdc.set_property("persons", entity) - new_entity = gdc.get_property("persons", dpf.DataTree) + new_entity = gdc.get_property("persons") assert new_entity.get_as("name") == "john"