Skip to content
Merged
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/4572.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
'wait_process_finished' in sessions.
2 changes: 1 addition & 1 deletion src/ansys/fluent/core/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any):

def __dir__(self):
if self._fluent_connection is None:
return ["is_active"]
return ["is_active", "wait_process_finished"]
dir_list = set(list(self.__dict__.keys()) + dir(type(self))) - {
"field_data",
"field_info",
Expand Down
10 changes: 7 additions & 3 deletions src/ansys/fluent/core/session_meshing.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,11 +95,15 @@ def switch_to_solver(self) -> Any:
return solver_session

def __getattribute__(self, item: str):
if super(Meshing, self).__getattribute__(
"_fluent_connection"
) is None and item not in [
try:
_connection = super(Meshing, self).__getattribute__("_fluent_connection")
except AttributeError:
_connection = False
if _connection is None and item not in [
"is_active",
"_fluent_connection",
"_fluent_connection_backup",
"wait_process_finished",
]:
raise AttributeError(
f"'{__class__.__name__}' object has no attribute '{item}'"
Expand Down
29 changes: 21 additions & 8 deletions src/ansys/fluent/core/session_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -347,18 +347,31 @@ def set_state(self, state: StateT | None = None, **kwargs):
def __call__(self):
return self.get_state()

def __getattr__(self, name):
def __getattribute__(self, item: str):
try:
return super().__getattribute__(name)
except AttributeError as ex:
if name in self.settings.child_names:
_connection = super(Solver, self).__getattribute__("_fluent_connection")
except AttributeError:
_connection = False
if _connection is None and item not in [
"is_active",
"_fluent_connection",
"_fluent_connection_backup",
"wait_process_finished",
]:
raise AttributeError(
f"'{__class__.__name__}' object has no attribute '{item}'"
)
try:
return super(Solver, self).__getattribute__(item)
except AttributeError:
settings = super(Solver, self).__getattribute__("settings")
if item in settings.child_names:
warnings.warn(
f"'{name}' is deprecated. Use 'settings.{name}' instead.",
f"'{item}' is deprecated. Use 'settings.{item}' instead.",
DeprecatedSettingWarning,
)
return getattr(self.settings, name)
else:
raise ex
return getattr(settings, item)
raise

def __dir__(self):
dir_list = set(super().__dir__()) - {
Expand Down
1 change: 0 additions & 1 deletion tests/test_events_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,6 @@ def cb(session, event_info):
solver.events.unregister_callback(cb_id)
solver.settings.solution.run_calculation.iterate(iter_count=5)
assert len(event_index) == len(iteration_index)
solver.exit()


@pytest.mark.fluent_version(">=23.1")
Expand Down
28 changes: 26 additions & 2 deletions tests/test_fluent_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,9 +216,9 @@ def test_fluent_connection_properties(


def test_fluent_freeze_kill(
new_solver_session,
new_solver_session_wo_exit,
) -> None:
session = new_solver_session
session = new_solver_session_wo_exit
_read_case(session=session, lightweight_setup=False)

def _freeze_fluent(s):
Expand Down Expand Up @@ -292,3 +292,27 @@ def test_fluent_exit_wait():
with pytest.raises(WaitTypeError):
session4 = pyfluent.launch_fluent()
session4.exit(wait="wait")


def test_wait_process_finished():
meshing_session = pyfluent.launch_fluent(mode="meshing")
assert len(dir(meshing_session)) > 2
assert meshing_session.is_active()
assert meshing_session.tui
meshing_session.exit()
assert dir(meshing_session) == ["is_active", "wait_process_finished"]
assert not meshing_session.is_active()
with pytest.raises(AttributeError):
meshing_session.tui
assert meshing_session.wait_process_finished(wait=5)

solver_session = pyfluent.launch_fluent()
assert len(dir(solver_session)) > 2
assert solver_session.is_active()
assert solver_session.settings
solver_session.exit()
assert dir(solver_session) == ["is_active", "wait_process_finished"]
assert not solver_session.is_active()
with pytest.raises(AttributeError):
solver_session.settings
assert solver_session.wait_process_finished(wait=5)
4 changes: 2 additions & 2 deletions tests/test_meshing_workflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -457,9 +457,9 @@ def test_inaccessible_meshing_attributes_after_switching_to_solver(
with pytest.raises(AttributeError):
# 'switched' attribute is not there in Meshing.
assert meshing.switched
assert dir(meshing) == ["is_active"]
assert dir(meshing) == ["is_active", "wait_process_finished"]
del meshing
assert solver.is_active() is True
solver.exit()
assert solver.is_active() is False
assert dir(solver) == ["is_active"]
assert dir(solver) == ["is_active", "wait_process_finished"]
2 changes: 0 additions & 2 deletions tests/test_preferences.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,6 @@ def test_solver_preferences(new_solver_session):
perfered_graphics.AnimationOption = "wireframe"
assert perfered_graphics.AnimationOption() == "wireframe"

solver.exit()


@pytest.mark.codegen_required
def test_meshing_preferences(new_meshing_session):
Expand Down
8 changes: 4 additions & 4 deletions tests/test_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ def test_create_mock_session_from_launch_fluent_by_passing_ip_port_password() ->
assert session.is_server_healthy()
server.stop(None)
session.exit()
assert not session.is_server_healthy()
assert not session.is_active()


def test_create_mock_session_from_launch_fluent_by_setting_ip_port_env_var(
Expand Down Expand Up @@ -305,7 +305,7 @@ def test_create_mock_session_from_launch_fluent_by_setting_ip_port_env_var(
assert session.is_server_healthy()
server.stop(None)
session.exit()
assert not session.is_server_healthy()
assert not session.is_active()


@pytest.mark.parametrize("file_format", ["jou", "py"])
Expand Down Expand Up @@ -829,7 +829,7 @@ def test_dir_for_session(new_meshing_session_wo_exit):

solver = meshing.switch_to_solver()

assert dir(meshing) == ["is_active"]
assert dir(meshing) == ["is_active", "wait_process_finished"]

for attr in ["read_case_lightweight", "settings"]:
assert getattr(solver, attr)
Expand All @@ -850,5 +850,5 @@ def test_dir_for_session(new_meshing_session_wo_exit):
solver.enable_beta_features()
meshing_new = solver.switch_to_meshing()

assert dir(solver) == ["is_active"]
assert dir(solver) == ["is_active", "wait_process_finished"]
assert len(dir(meshing_new)) > 1