Skip to content

Commit 9db2999

Browse files
Add human-readable object representation
1 parent f6924d5 commit 9db2999

40 files changed

+450
-0
lines changed

core/esmf-aspect-meta-model-python/esmf_aspect_meta_model_python/base/base.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,7 @@ def parent_elements(self, elements: list["Base"]) -> None:
3434
@abstractmethod
3535
def append_parent_element(self, element: "Base") -> None:
3636
"""Add parent element."""
37+
38+
def __repr__(self):
39+
"""Object representation."""
40+
return f"{self.__class__.__name__}({self.name})"

core/esmf-aspect-meta-model-python/esmf_aspect_meta_model_python/base/data_types/data_type.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,6 @@ def is_scalar(self) -> bool:
3030
def is_complex(self) -> bool:
3131
"""Is complex flag."""
3232
return not self.is_scalar
33+
34+
def __repr__(self):
35+
return f"{self.__class__.__name__}({self.urn})"

core/esmf-aspect-meta-model-python/esmf_aspect_meta_model_python/base/data_types/scalar.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,6 @@ class Scalar(DataType, ABC):
2525
def is_scalar(self) -> bool:
2626
"""Is scalar flag."""
2727
return True
28+
29+
def __repr__(self):
30+
return f"{self.__class__.__name__}({self.urn})"

core/esmf-aspect-meta-model-python/esmf_aspect_meta_model_python/impl/base_impl.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
class BaseImpl(Base, metaclass=abc.ABCMeta):
2121
"""Base Implemented class."""
2222

23+
SCALAR_ATTR_NAMES = ["meta_model_version", "urn", "preferred_names", "descriptions"]
24+
LIST_ATTR_NAMES = ["see"]
25+
2326
def __init__(self, meta_model_base_attributes: MetaModelBaseAttributes):
2427
self._meta_model_version = meta_model_base_attributes.meta_model_version
2528
self._urn = meta_model_base_attributes.urn
@@ -75,3 +78,60 @@ def urn(self) -> Optional[str]:
7578
def name(self) -> str:
7679
"""Name."""
7780
return self._name
81+
82+
def _get_base_message(self):
83+
"""Get base string message."""
84+
message = self.__class__.__name__
85+
message = message.replace("Default", "")
86+
message = f"({message}){self.name}"
87+
88+
return message
89+
90+
@staticmethod
91+
def _prepare_attr_message(name, value):
92+
"""Prepare a message with scalar attribute value."""
93+
message = f"{name}: "
94+
if isinstance(value, dict):
95+
for k, v in value.items():
96+
message += f"\n\t\t{k.upper()}: {v}"
97+
else:
98+
message += repr(value) if isinstance(value, BaseImpl) else str(value)
99+
100+
return message
101+
102+
def _get_scalar_attr_info(self):
103+
"""Get info about all scalar attributes."""
104+
message = ""
105+
for attr_name in self.SCALAR_ATTR_NAMES:
106+
attr_value = getattr(self, attr_name, None)
107+
if attr_value:
108+
message += f"\n\t{self._prepare_attr_message(attr_name, attr_value)}"
109+
110+
return message
111+
112+
@staticmethod
113+
def _prepare_list_attr_message(name, value):
114+
"""Prepare a message for the list data type attribute value."""
115+
message = f"{name}:"
116+
for elem in value:
117+
message += f"\n\t\t{elem.name}"
118+
119+
return message
120+
121+
def _get_list_attr_info(self):
122+
"""Get info about all list data type attributes."""
123+
message = ""
124+
for attr_name in self.LIST_ATTR_NAMES:
125+
attr_value = getattr(self, attr_name, [])
126+
if attr_value:
127+
message += f"\n\t{self._prepare_list_attr_message(attr_name, attr_value)}"
128+
129+
return message
130+
131+
def __str__(self):
132+
"""String representation."""
133+
message = self._get_base_message()
134+
message += self._get_scalar_attr_info()
135+
message += self._get_list_attr_info()
136+
137+
return message

core/esmf-aspect-meta-model-python/esmf_aspect_meta_model_python/impl/characteristics/collection/default_collection.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
class DefaultCollection(DefaultCharacteristic, Collection):
2222
"""Default Collection class."""
2323

24+
SCALAR_ATTR_NAMES = DefaultCharacteristic.SCALAR_ATTR_NAMES + ["element_characteristic"]
25+
2426
def __init__(
2527
self,
2628
meta_model_base_attributes: MetaModelBaseAttributes,

core/esmf-aspect-meta-model-python/esmf_aspect_meta_model_python/impl/characteristics/default_characteristic.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
class DefaultCharacteristic(BaseImpl, Characteristic):
2020
"""Default Characteristic class."""
2121

22+
SCALAR_ATTR_NAMES = BaseImpl.SCALAR_ATTR_NAMES + ["data_type"]
23+
2224
def __init__(self, meta_model_base_attributes: MetaModelBaseAttributes, data_type: DataType):
2325
super().__init__(meta_model_base_attributes)
2426
self._data_type = data_type

core/esmf-aspect-meta-model-python/esmf_aspect_meta_model_python/impl/characteristics/default_enumeration.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
class DefaultEnumeration(DefaultCharacteristic, Enumeration):
2121
"""Default Enumeration class."""
2222

23+
LIST_ATTR_NAMES = DefaultCharacteristic.LIST_ATTR_NAMES + ["values"]
24+
2325
def __init__(
2426
self,
2527
meta_model_base_attributes: MetaModelBaseAttributes,

core/esmf-aspect-meta-model-python/esmf_aspect_meta_model_python/impl/characteristics/default_state.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
class DefaultState(DefaultEnumeration, State):
2121
"""Default State class."""
2222

23+
SCALAR_ATTR_NAMES = DefaultEnumeration.SCALAR_ATTR_NAMES + ["default_value"]
24+
2325
def __init__(
2426
self,
2527
meta_model_base_attributes: MetaModelBaseAttributes,

core/esmf-aspect-meta-model-python/esmf_aspect_meta_model_python/impl/characteristics/default_structured_value.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
class DefaultStructuredValue(DefaultCharacteristic, StructuredValue):
2121
"""Default Structured Value class"""
2222

23+
SCALAR_ATTR_NAMES = DefaultCharacteristic.SCALAR_ATTR_NAMES + ["deconstruction_rule"]
24+
LIST_ATTR_NAMES = DefaultCharacteristic.LIST_ATTR_NAMES + ["elements"]
25+
2326
def __init__(
2427
self,
2528
meta_model_base_attributes: MetaModelBaseAttributes,

core/esmf-aspect-meta-model-python/esmf_aspect_meta_model_python/impl/characteristics/default_trait.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
class DefaultTrait(DefaultCharacteristic, Trait):
2222
"""Default Trait class."""
2323

24+
SCALAR_ATTR_NAMES = DefaultCharacteristic.SCALAR_ATTR_NAMES + ["base_characteristic"]
25+
LIST_ATTR_NAMES = DefaultCharacteristic.LIST_ATTR_NAMES + ["constraints"]
26+
2427
def __init__(
2528
self,
2629
meta_model_base_attributes: MetaModelBaseAttributes,

0 commit comments

Comments
 (0)