Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/changelog.d/1638.added.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add max-length message display
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ dependencies = [
"ansys-tools-common>=0.4.0",
"appdirs>=1.4.0",
"click>=8.1.3",
"clr-loader>=0.2.6",
"clr-loader>=0.3",
"grpcio>=1.30.0",
"protobuf>=5",
"psutil>=6",
Expand Down
4 changes: 3 additions & 1 deletion src/ansys/mechanical/core/embedding/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -563,7 +563,9 @@ def plotter(self, obj=None) -> typing.Any | None:
LOG.warning("Plotting is only supported with version 2024R2 and later!")
return None

# TODO : Check if anything loaded inside app or else show warning and return
if self.Model.Geometry.Children.Count == 0:
LOG.warning("No geometry is loaded. Open a model before plotting.")
return None

from ansys.mechanical.core.embedding.graphics.embedding_plotter import to_plotter

Expand Down
38 changes: 21 additions & 17 deletions src/ansys/mechanical/core/embedding/messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,6 @@

"""Message Manager for App."""

# TODO: add functionality to filter only errors, warnings, info
# TODO: add max number of messages to display
# TODO: implement pep8 formatting

try: # noqa: F401
import pandas as pd

Expand Down Expand Up @@ -142,8 +138,16 @@ def remove(self, index: int):
_msg = self._messages[index]
self._messages.Remove(_msg)

def _show_string(self, filter: str = "Severity;DisplayString") -> str:
if self._messages.Count == 0:
def _get_filtered_messages(self, max_messages=None):
"""Return messages capped by max_messages."""
messages = list(self._messages)
if max_messages is not None:
messages = messages[:max_messages]
return messages

def _show_string(self, filter: str = "Severity;DisplayString", max_messages=None) -> str:
messages = self._get_filtered_messages(max_messages=max_messages)
if not messages:
return "No messages to display."

if filter == "*":
Expand All @@ -160,34 +164,34 @@ def _show_string(self, filter: str = "Severity;DisplayString") -> str:
selected_columns = [col.strip() for col in filter.split(";")]

lines = []
for msg in self._messages:
for msg in messages:
for key in selected_columns:
line = f"{key}: {getattr(msg, key, 'Specified attribute not found.')}"
lines.append(line)
return "\n".join(lines)

def show(self, filter="Severity;DisplayString") -> None:
def show(self, filter="Severity;DisplayString", max_messages=None) -> None:
"""Print all messages with full details.

Parameters
----------
filter : str, optional
Semicolon separated list of message attributes to display.
Default is "severity;message".
if filter is "*", all available attributes will be displayed.
Default is ``"Severity;DisplayString"``.
If filter is ``"*"``, all available attributes will be displayed.
max_messages : int, optional
Maximum number of messages to display. The default is ``None``,
in which case all messages are shown.

Examples
--------
>>> app.messages.show()
... severity: info
... message: Sample message.
... Severity: INFO
... DisplayString: Sample message.

>>> app.messages.show(filter="time_stamp;severity;message")
... time_stamp: 1/30/2025 12:10:35 PM
... severity: info
... message: Sample message.
>>> app.messages.show(max_messages=5)
"""
show_string = self._show_string(filter)
show_string = self._show_string(filter, max_messages=max_messages)
print(show_string)

def clear(self):
Expand Down
1 change: 0 additions & 1 deletion src/ansys/mechanical/core/logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -408,7 +408,6 @@ def __init__(self, level=logging.DEBUG, to_file=False, to_stdout=True, filename=
self.logger.addFilter(InstanceFilter())
self.logger.setLevel(level)
self.logger.propagate = True
self.level = self.logger.level # TODO: TO REMOVE

# Write logging methods.
self.debug = self.logger.debug
Expand Down
15 changes: 15 additions & 0 deletions tests/embedding/test_messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,21 @@ def test_message_show(embedded_app):
assert "Specified attribute not found" in messages_str


@pytest.mark.embedding
def test_message_show_max_messages(embedded_app):
"""Test that max_messages limits the number of messages shown."""
embedded_app.messages.clear()
embedded_app.messages.add("info", "First message")
embedded_app.messages.add("warning", "Second message")
embedded_app.messages.add("error", "Third message")
assert len(embedded_app.messages) == 3

messages_str = str(embedded_app.messages._show_string(max_messages=1))
assert "Third message" in messages_str
assert "First message" not in messages_str
assert "Second message" not in messages_str


@pytest.mark.embedding
def test_message_get(embedded_app, graphics_test_mechdb_file):
"""Test getting a message."""
Expand Down
Loading