From 96ab72118de4bdb655c38caa0ab2129f9166f09b Mon Sep 17 00:00:00 2001 From: Prithwish Mukherjee Date: Mon, 3 Oct 2022 11:31:53 +0530 Subject: [PATCH 01/10] Implemented solver_workflow in solver mode --- codegen/datamodelgen.py | 3 +++ src/ansys/fluent/core/session.py | 23 ++++++++++++++++++++--- src/ansys/fluent/core/session_solver.py | 15 ++++++++++++++- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/codegen/datamodelgen.py b/codegen/datamodelgen.py index 7b82fd437966..ced209e9faef 100644 --- a/codegen/datamodelgen.py +++ b/codegen/datamodelgen.py @@ -121,6 +121,9 @@ def __init__(self): "preferences": DataModelStaticInfo( "preferences", ("meshing", "solver", "flicing,"), self.version ), + "solver_workflow": DataModelStaticInfo( + "solverworkflow", ("solver",), self.version + ), } self._delete_generated_files() self._populate_static_info() diff --git a/src/ansys/fluent/core/session.py b/src/ansys/fluent/core/session.py index d80cbd41be22..c3f2ed8a315c 100644 --- a/src/ansys/fluent/core/session.py +++ b/src/ansys/fluent/core/session.py @@ -32,16 +32,24 @@ def parse_server_info_file(filename: str): return ip, port, password -def _get_preferences(session): +def _get_datamodel_attributes(session, attribute: str): try: preferences_module = importlib.import_module( - f"ansys.fluent.core.datamodel_{session.version}.preferences" + f"ansys.fluent.core.datamodel_{session.version}." + attribute ) - return preferences_module.Root(session._se_service, "preferences", []) + return preferences_module.Root(session._se_service, attribute, []) except (ImportError, ModuleNotFoundError): LOG.warning(_CODEGEN_MSG_DATAMODEL) +def _get_preferences(session): + return _get_datamodel_attributes(session, "preferences") + + +def _get_solver_workflow(session): + return _get_datamodel_attributes(session, "solver_workflow") + + class _BaseSession: """Instantiates a Fluent connection. @@ -76,6 +84,7 @@ def __init__(self, fluent_connection: _FluentConnection): self.scheme_eval = self.fluent_connection.scheme_eval self._uploader = None self._preferences = None + self._solver_workflow = None @classmethod def create_from_server_info_file( @@ -260,6 +269,7 @@ def __init__( self._uploader = None self._preferences = None + self._solver_workflow = None @classmethod def create_from_server_info_file( @@ -360,6 +370,13 @@ def preferences(self): self._preferences = _get_preferences(self) return self._preferences + @property + def solver_workflow(self): + """solver_workflow datamodel root.""" + if self._solver_workflow is None: + self._solver_workflow = _get_solver_workflow(self) + return self._solver_workflow + class Solver: def __init__(self, fluent_connection: _FluentConnection): self._fluent_connection = fluent_connection diff --git a/src/ansys/fluent/core/session_solver.py b/src/ansys/fluent/core/session_solver.py index 0ec1c4b60dbc..11b5ccac4940 100644 --- a/src/ansys/fluent/core/session_solver.py +++ b/src/ansys/fluent/core/session_solver.py @@ -3,7 +3,12 @@ import importlib from ansys.fluent.core.services.datamodel_tui import TUIMenuGeneric -from ansys.fluent.core.session import _CODEGEN_MSG_TUI, _BaseSession, _get_preferences +from ansys.fluent.core.session import ( + _CODEGEN_MSG_TUI, + _BaseSession, + _get_preferences, + _get_solver_workflow, +) from ansys.fluent.core.solver.flobject import get_root as settings_get_root from ansys.fluent.core.utils.fluent_version import get_version_for_filepath from ansys.fluent.core.utils.logging import LOG @@ -25,6 +30,7 @@ def __init__( self._tui = None self._settings_root = None self._version = None + self._solver_workflow = None @property def version(self): @@ -107,3 +113,10 @@ def preferences(self): if self._preferences is None: self._preferences = _get_preferences(self) return self._preferences + + @property + def solver_workflow(self): + """solver_workflow datamodel root.""" + if self._solver_workflow is None: + self._solver_workflow = _get_solver_workflow(self) + return self._solver_workflow From e4c9800eaa115e2ed59b04414c6e32a7c4e398d2 Mon Sep 17 00:00:00 2001 From: Prithwish Mukherjee Date: Mon, 3 Oct 2022 11:58:20 +0530 Subject: [PATCH 02/10] Handle the case - solvermode not avaialbe for 22.2 --- codegen/datamodelgen.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/codegen/datamodelgen.py b/codegen/datamodelgen.py index ced209e9faef..2d6dc8eaf9c0 100644 --- a/codegen/datamodelgen.py +++ b/codegen/datamodelgen.py @@ -123,8 +123,12 @@ def __init__(self): ), "solver_workflow": DataModelStaticInfo( "solverworkflow", ("solver",), self.version - ), + ) + if int(self.version) >= 231 + else None, } + if not self._static_info["solver_workflow"]: + del self._static_info["solver_workflow"] self._delete_generated_files() self._populate_static_info() From aed6943c00e82ddd89e89d0eade01453d6a27ff8 Mon Sep 17 00:00:00 2001 From: Prithwish Mukherjee Date: Mon, 3 Oct 2022 20:04:42 +0530 Subject: [PATCH 03/10] Updated solver --- codegen/datamodelgen.py | 11 +++++++++-- src/ansys/fluent/core/utils/setup_for_fluent.py | 8 +++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/codegen/datamodelgen.py b/codegen/datamodelgen.py index 2d6dc8eaf9c0..7211293f4836 100644 --- a/codegen/datamodelgen.py +++ b/codegen/datamodelgen.py @@ -107,7 +107,14 @@ class DataModelGenerator: def __init__(self): self.version = get_version_for_filepath() self._static_info: Dict[str, DataModelStaticInfo] = { - "workflow": DataModelStaticInfo("workflow", ("meshing",), self.version), + "workflow": DataModelStaticInfo( + "workflow", + ( + "meshing", + "solver", + ), + self.version, + ), "meshing": DataModelStaticInfo("meshing", ("meshing",), self.version), "PartManagement": DataModelStaticInfo( "PartManagement", ("meshing",), self.version @@ -121,7 +128,7 @@ def __init__(self): "preferences": DataModelStaticInfo( "preferences", ("meshing", "solver", "flicing,"), self.version ), - "solver_workflow": DataModelStaticInfo( + "solverworkflow": DataModelStaticInfo( "solverworkflow", ("solver",), self.version ) if int(self.version) >= 231 diff --git a/src/ansys/fluent/core/utils/setup_for_fluent.py b/src/ansys/fluent/core/utils/setup_for_fluent.py index 8e38ba22ff82..8518c8af4e33 100644 --- a/src/ansys/fluent/core/utils/setup_for_fluent.py +++ b/src/ansys/fluent/core/utils/setup_for_fluent.py @@ -20,12 +20,14 @@ def setup_for_fluent(*args, **kwargs): globals = {} if "mode" in kwargs.keys() and kwargs["mode"] == "meshing": globals["meshing"] = session.meshing - globals["workflow"] = session.workflow globals["PartManagement"] = session.PartManagement globals["PMFileManagement"] = session.PMFileManagement - globals["preferences"] = session.preferences globals["solver"] = Solver(fluent_connection=session.fluent_connection) elif "mode" in kwargs.keys() and kwargs["mode"] == "solver": globals["solver"] = session - globals["preferences"] = session.preferences + + globals["preferences"] = session.preferences + globals["solverworkflow"] = session.solverworkflow + globals["workflow"] = session.workflow + return globals From 54fe5b774136fe96f16cae16668a545d4e4ea641 Mon Sep 17 00:00:00 2001 From: Prithwish Mukherjee Date: Mon, 3 Oct 2022 21:21:36 +0530 Subject: [PATCH 04/10] solver_workflow -> solverworkflow --- codegen/datamodelgen.py | 4 ++-- src/ansys/fluent/core/session.py | 18 +++++++++--------- src/ansys/fluent/core/session_solver.py | 14 +++++++------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/codegen/datamodelgen.py b/codegen/datamodelgen.py index 7211293f4836..f8eed0693206 100644 --- a/codegen/datamodelgen.py +++ b/codegen/datamodelgen.py @@ -134,8 +134,8 @@ def __init__(self): if int(self.version) >= 231 else None, } - if not self._static_info["solver_workflow"]: - del self._static_info["solver_workflow"] + if not self._static_info["solverworkflow"]: + del self._static_info["solverworkflow"] self._delete_generated_files() self._populate_static_info() diff --git a/src/ansys/fluent/core/session.py b/src/ansys/fluent/core/session.py index c3f2ed8a315c..adeed4b7f5e1 100644 --- a/src/ansys/fluent/core/session.py +++ b/src/ansys/fluent/core/session.py @@ -46,8 +46,8 @@ def _get_preferences(session): return _get_datamodel_attributes(session, "preferences") -def _get_solver_workflow(session): - return _get_datamodel_attributes(session, "solver_workflow") +def _get_solverworkflow(session): + return _get_datamodel_attributes(session, "solverworkflow") class _BaseSession: @@ -84,7 +84,7 @@ def __init__(self, fluent_connection: _FluentConnection): self.scheme_eval = self.fluent_connection.scheme_eval self._uploader = None self._preferences = None - self._solver_workflow = None + self._solverworkflow = None @classmethod def create_from_server_info_file( @@ -269,7 +269,7 @@ def __init__( self._uploader = None self._preferences = None - self._solver_workflow = None + self._solverworkflow = None @classmethod def create_from_server_info_file( @@ -371,11 +371,11 @@ def preferences(self): return self._preferences @property - def solver_workflow(self): - """solver_workflow datamodel root.""" - if self._solver_workflow is None: - self._solver_workflow = _get_solver_workflow(self) - return self._solver_workflow + def solverworkflow(self): + """solverworkflow datamodel root.""" + if self._solverworkflow is None: + self._solverworkflow = _get_solverworkflow(self) + return self._solverworkflow class Solver: def __init__(self, fluent_connection: _FluentConnection): diff --git a/src/ansys/fluent/core/session_solver.py b/src/ansys/fluent/core/session_solver.py index 11b5ccac4940..684afa4de531 100644 --- a/src/ansys/fluent/core/session_solver.py +++ b/src/ansys/fluent/core/session_solver.py @@ -7,7 +7,7 @@ _CODEGEN_MSG_TUI, _BaseSession, _get_preferences, - _get_solver_workflow, + _get_solverworkflow, ) from ansys.fluent.core.solver.flobject import get_root as settings_get_root from ansys.fluent.core.utils.fluent_version import get_version_for_filepath @@ -30,7 +30,7 @@ def __init__( self._tui = None self._settings_root = None self._version = None - self._solver_workflow = None + self._solverworkflow = None @property def version(self): @@ -115,8 +115,8 @@ def preferences(self): return self._preferences @property - def solver_workflow(self): - """solver_workflow datamodel root.""" - if self._solver_workflow is None: - self._solver_workflow = _get_solver_workflow(self) - return self._solver_workflow + def solverworkflow(self): + """solverworkflow datamodel root.""" + if self._solverworkflow is None: + self._solverworkflow = _get_solverworkflow(self) + return self._solverworkflow From ac416ed6ecfb43f72048206a5924f9782e50c7fc Mon Sep 17 00:00:00 2001 From: Prithwish Mukherjee Date: Tue, 4 Oct 2022 10:25:48 +0530 Subject: [PATCH 05/10] MeshingWorkflow -> WorkflowWrapper --- src/ansys/fluent/core/meshing/workflow.py | 101 +----------------- src/ansys/fluent/core/session_base_meshing.py | 4 +- src/ansys/fluent/core/session_solver.py | 23 ++++ src/ansys/fluent/core/workflow.py | 100 +++++++++++++++++ 4 files changed, 126 insertions(+), 102 deletions(-) create mode 100644 src/ansys/fluent/core/workflow.py diff --git a/src/ansys/fluent/core/meshing/workflow.py b/src/ansys/fluent/core/meshing/workflow.py index 1495181ab0ba..2ae28399f5fd 100644 --- a/src/ansys/fluent/core/meshing/workflow.py +++ b/src/ansys/fluent/core/meshing/workflow.py @@ -1,100 +1 @@ -from ansys.fluent.core.services.datamodel_se import MakeReadOnly, PyCallableStateObject - - -def _new_command_for_task(task, meshing): - class NewCommandError(Exception): - def __init__(self, task_name): - super().__init__(f"Could not create command for meshing task {task_name}") - - task_cmd_name = task.CommandName() - cmd_creator = getattr(meshing, task_cmd_name) - if cmd_creator: - new_cmd = cmd_creator.new() - if new_cmd: - return new_cmd - raise NewCommandError(task._name_()) - - -class MeshingWorkflow: - class TaskContainer(PyCallableStateObject): - def __init__(self, meshing): - self._meshing_container = meshing - self._task_container = meshing._workflow.TaskObject - - def __getitem__(self, name): - return MeshingWorkflow.Task(self._meshing_container, name) - - def __getattr__(self, attr): - return getattr(self._task_container, attr) - - def __dir__(self): - return sorted( - set( - list(self.__dict__.keys()) - + dir(type(self)) - + dir(self._task_container) - ) - ) - - class Task(PyCallableStateObject): - def __init__(self, meshing, name): - self.__dict__.update( - dict( - _workflow=meshing._workflow, - _meshing=meshing._meshing, - _task=meshing._workflow.TaskObject[name], - _cmd=None, - ) - ) - - @property - def CommandArguments(self): - return self._refreshed_command() - - def _refreshed_command(self): - task_arg_state = self.Arguments.get_state() - cmd = self._command() - if task_arg_state: - cmd.set_state(task_arg_state) - return MakeReadOnly(cmd) - - def _command(self): - if not self._cmd: - self._cmd = _new_command_for_task(self._task, self._meshing) - return self._cmd - - def __getattr__(self, attr): - return getattr(self._task, attr) - - def __setattr__(self, attr, value): - if attr in self.__dict__: - self.__dict__[attr] = value - else: - setattr(self._task, attr, value) - - def __dir__(self): - return sorted( - set(list(self.__dict__.keys()) + dir(type(self)) + dir(self._task)) - ) - - def __init__(self, workflow, meshing): - self._workflow = workflow - self._meshing = meshing - - def task(self, name): - return MeshingWorkflow.Task(self, name) - - @property - def TaskObject(self): - return MeshingWorkflow.TaskContainer(self) - - def __getattr__(self, attr): - return getattr(self._workflow, attr) - - def __dir__(self): - return sorted( - set(list(self.__dict__.keys()) + dir(type(self)) + dir(self._workflow)) - ) - - def __call__(self): - return self._workflow() +pass diff --git a/src/ansys/fluent/core/session_base_meshing.py b/src/ansys/fluent/core/session_base_meshing.py index 2eccb93dc6ec..0b49cf68757c 100644 --- a/src/ansys/fluent/core/session_base_meshing.py +++ b/src/ansys/fluent/core/session_base_meshing.py @@ -2,12 +2,12 @@ from ansys.fluent.core.fluent_connection import _FluentConnection from ansys.fluent.core.meshing.meshing import Meshing -from ansys.fluent.core.meshing.workflow import MeshingWorkflow from ansys.fluent.core.services.datamodel_se import PyMenuGeneric from ansys.fluent.core.services.datamodel_tui import TUIMenuGeneric from ansys.fluent.core.session_shared import _CODEGEN_MSG_DATAMODEL, _CODEGEN_MSG_TUI from ansys.fluent.core.utils.fluent_version import get_version_for_filepath from ansys.fluent.core.utils.logging import LOG +from ansys.fluent.core.workflow import WorkflowWrapper class _BaseMeshing: @@ -89,7 +89,7 @@ def _workflow_se(self): @property def workflow(self): if not self._workflow: - self._workflow = MeshingWorkflow(self._workflow_se, self.meshing) + self._workflow = WorkflowWrapper(self._workflow_se, self.meshing) return self._workflow @property diff --git a/src/ansys/fluent/core/session_solver.py b/src/ansys/fluent/core/session_solver.py index 684afa4de531..ff900a5edbd2 100644 --- a/src/ansys/fluent/core/session_solver.py +++ b/src/ansys/fluent/core/session_solver.py @@ -2,6 +2,7 @@ import importlib +from ansys.fluent.core.services.datamodel_se import PyMenuGeneric from ansys.fluent.core.services.datamodel_tui import TUIMenuGeneric from ansys.fluent.core.session import ( _CODEGEN_MSG_TUI, @@ -9,9 +10,11 @@ _get_preferences, _get_solverworkflow, ) +from ansys.fluent.core.session_shared import _CODEGEN_MSG_DATAMODEL from ansys.fluent.core.solver.flobject import get_root as settings_get_root from ansys.fluent.core.utils.fluent_version import get_version_for_filepath from ansys.fluent.core.utils.logging import LOG +from ansys.fluent.core.workflow import WorkflowWrapper class Solver(_BaseSession): @@ -28,6 +31,7 @@ def __init__( self._se_service = fluent_connection.datamodel_service_se self._settings_service = self.fluent_connection.settings_service self._tui = None + self._workflow = None self._settings_root = None self._version = None self._solverworkflow = None @@ -53,6 +57,25 @@ def tui(self): self._tui = TUIMenuGeneric([], self._tui_service) return self._tui + @property + def _workflow_se(self): + """workflow datamodel root.""" + try: + workflow_module = importlib.import_module( + f"ansys.fluent.core.datamodel_{self.version}.workflow" + ) + workflow_se = workflow_module.Root(self._se_service, "workflow", []) + except (ImportError, ModuleNotFoundError): + LOG.warning(_CODEGEN_MSG_DATAMODEL) + workflow_se = PyMenuGeneric(self._se_service, "workflow") + return workflow_se + + @property + def workflow(self): + if not self._workflow: + self._workflow = WorkflowWrapper(self._workflow_se, Solver) + return self._workflow + @property def _root(self): """root settings object.""" diff --git a/src/ansys/fluent/core/workflow.py b/src/ansys/fluent/core/workflow.py new file mode 100644 index 000000000000..ffadd90368fa --- /dev/null +++ b/src/ansys/fluent/core/workflow.py @@ -0,0 +1,100 @@ +from ansys.fluent.core.services.datamodel_se import MakeReadOnly, PyCallableStateObject + + +def _new_command_for_task(task, session): + class NewCommandError(Exception): + def __init__(self, task_name): + super().__init__(f"Could not create command for meshing task {task_name}") + + task_cmd_name = task.CommandName() + cmd_creator = getattr(session, task_cmd_name) + if cmd_creator: + new_cmd = cmd_creator.new() + if new_cmd: + return new_cmd + raise NewCommandError(task._name_()) + + +class WorkflowWrapper: + class TaskContainer(PyCallableStateObject): + def __init__(self, session): + self._session_container = session + self._task_container = session._workflow.TaskObject + + def __getitem__(self, name): + return WorkflowWrapper.Task(self._session_container, name) + + def __getattr__(self, attr): + return getattr(self._task_container, attr) + + def __dir__(self): + return sorted( + set( + list(self.__dict__.keys()) + + dir(type(self)) + + dir(self._task_container) + ) + ) + + class Task(PyCallableStateObject): + def __init__(self, session, name): + self.__dict__.update( + dict( + _workflow=session._workflow, + _meshing=session._meshing, + _task=session._workflow.TaskObject[name], + _cmd=None, + ) + ) + + @property + def CommandArguments(self): + return self._refreshed_command() + + def _refreshed_command(self): + task_arg_state = self.Arguments.get_state() + cmd = self._command() + if task_arg_state: + cmd.set_state(task_arg_state) + return MakeReadOnly(cmd) + + def _command(self): + if not self._cmd: + self._cmd = _new_command_for_task(self._task, self._session) + return self._cmd + + def __getattr__(self, attr): + return getattr(self._task, attr) + + def __setattr__(self, attr, value): + if attr in self.__dict__: + self.__dict__[attr] = value + else: + setattr(self._task, attr, value) + + def __dir__(self): + return sorted( + set(list(self.__dict__.keys()) + dir(type(self)) + dir(self._task)) + ) + + def __init__(self, workflow, session): + self._workflow = workflow + self._session = session + + def task(self, name): + return WorkflowWrapper.Task(self, name) + + @property + def TaskObject(self): + return WorkflowWrapper.TaskContainer(self) + + def __getattr__(self, attr): + return getattr(self._workflow, attr) + + def __dir__(self): + return sorted( + set(list(self.__dict__.keys()) + dir(type(self)) + dir(self._workflow)) + ) + + def __call__(self): + return self._workflow() From ff75a1affc14992a09b050619fd6ec4544a83a31 Mon Sep 17 00:00:00 2001 From: Prithwish Mukherjee Date: Tue, 4 Oct 2022 15:37:36 +0530 Subject: [PATCH 06/10] Minor issue corrections. --- src/ansys/fluent/core/meshing/workflow.py | 1 - 1 file changed, 1 deletion(-) delete mode 100644 src/ansys/fluent/core/meshing/workflow.py diff --git a/src/ansys/fluent/core/meshing/workflow.py b/src/ansys/fluent/core/meshing/workflow.py deleted file mode 100644 index 2ae28399f5fd..000000000000 --- a/src/ansys/fluent/core/meshing/workflow.py +++ /dev/null @@ -1 +0,0 @@ -pass From 69940dcbb48c64da8254e594bf1be7bb71a10dcf Mon Sep 17 00:00:00 2001 From: Prithwish Mukherjee Date: Tue, 4 Oct 2022 15:38:33 +0530 Subject: [PATCH 07/10] Minor issue corrections. --- src/ansys/fluent/core/workflow.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/ansys/fluent/core/workflow.py b/src/ansys/fluent/core/workflow.py index ffadd90368fa..9a6c1a532a31 100644 --- a/src/ansys/fluent/core/workflow.py +++ b/src/ansys/fluent/core/workflow.py @@ -17,12 +17,12 @@ def __init__(self, task_name): class WorkflowWrapper: class TaskContainer(PyCallableStateObject): - def __init__(self, session): - self._session_container = session - self._task_container = session._workflow.TaskObject + def __init__(self, meshing): + self._meshing_container = meshing + self._task_container = meshing._workflow.TaskObject def __getitem__(self, name): - return WorkflowWrapper.Task(self._session_container, name) + return WorkflowWrapper.Task(self._meshing_container, name) def __getattr__(self, attr): return getattr(self._task_container, attr) @@ -37,12 +37,12 @@ def __dir__(self): ) class Task(PyCallableStateObject): - def __init__(self, session, name): + def __init__(self, meshing, name): self.__dict__.update( dict( - _workflow=session._workflow, - _meshing=session._meshing, - _task=session._workflow.TaskObject[name], + _workflow=meshing._workflow, + _meshing=meshing._meshing, + _task=meshing._workflow.TaskObject[name], _cmd=None, ) ) @@ -60,7 +60,7 @@ def _refreshed_command(self): def _command(self): if not self._cmd: - self._cmd = _new_command_for_task(self._task, self._session) + self._cmd = _new_command_for_task(self._task, self._meshing) return self._cmd def __getattr__(self, attr): @@ -77,9 +77,9 @@ def __dir__(self): set(list(self.__dict__.keys()) + dir(type(self)) + dir(self._task)) ) - def __init__(self, workflow, session): + def __init__(self, workflow, meshing): self._workflow = workflow - self._session = session + self._meshing = meshing def task(self, name): return WorkflowWrapper.Task(self, name) From 6eb749a02cee99363539d2c7f52a8a2a1b9f8830 Mon Sep 17 00:00:00 2001 From: Prithwish Mukherjee Date: Tue, 4 Oct 2022 15:58:21 +0530 Subject: [PATCH 08/10] WorkflowWrapper (meshing -> command_source) --- src/ansys/fluent/core/workflow.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/ansys/fluent/core/workflow.py b/src/ansys/fluent/core/workflow.py index 9a6c1a532a31..8a935eee5fad 100644 --- a/src/ansys/fluent/core/workflow.py +++ b/src/ansys/fluent/core/workflow.py @@ -17,12 +17,12 @@ def __init__(self, task_name): class WorkflowWrapper: class TaskContainer(PyCallableStateObject): - def __init__(self, meshing): - self._meshing_container = meshing - self._task_container = meshing._workflow.TaskObject + def __init__(self, command_source): + self._container = command_source + self._task_container = command_source._workflow.TaskObject def __getitem__(self, name): - return WorkflowWrapper.Task(self._meshing_container, name) + return WorkflowWrapper.Task(self._container, name) def __getattr__(self, attr): return getattr(self._task_container, attr) @@ -37,12 +37,12 @@ def __dir__(self): ) class Task(PyCallableStateObject): - def __init__(self, meshing, name): + def __init__(self, command_source, name): self.__dict__.update( dict( - _workflow=meshing._workflow, - _meshing=meshing._meshing, - _task=meshing._workflow.TaskObject[name], + _workflow=command_source._workflow, + _meshing=command_source._command_source, + _task=command_source._workflow.TaskObject[name], _cmd=None, ) ) @@ -60,7 +60,7 @@ def _refreshed_command(self): def _command(self): if not self._cmd: - self._cmd = _new_command_for_task(self._task, self._meshing) + self._cmd = _new_command_for_task(self._task, self._command_source) return self._cmd def __getattr__(self, attr): @@ -77,9 +77,9 @@ def __dir__(self): set(list(self.__dict__.keys()) + dir(type(self)) + dir(self._task)) ) - def __init__(self, workflow, meshing): + def __init__(self, workflow, command_source): self._workflow = workflow - self._meshing = meshing + self._command_source = command_source def task(self, name): return WorkflowWrapper.Task(self, name) From d5de9f75368bbfd22d451b5e5bd0067602c9959a Mon Sep 17 00:00:00 2001 From: Prithwish Mukherjee Date: Tue, 4 Oct 2022 17:17:04 +0530 Subject: [PATCH 09/10] Minor bug fixing --- src/ansys/fluent/core/workflow.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ansys/fluent/core/workflow.py b/src/ansys/fluent/core/workflow.py index 8a935eee5fad..2177b4d68d9e 100644 --- a/src/ansys/fluent/core/workflow.py +++ b/src/ansys/fluent/core/workflow.py @@ -41,7 +41,7 @@ def __init__(self, command_source, name): self.__dict__.update( dict( _workflow=command_source._workflow, - _meshing=command_source._command_source, + _source=command_source._command_source, _task=command_source._workflow.TaskObject[name], _cmd=None, ) @@ -60,7 +60,7 @@ def _refreshed_command(self): def _command(self): if not self._cmd: - self._cmd = _new_command_for_task(self._task, self._command_source) + self._cmd = _new_command_for_task(self._task, self._source) return self._cmd def __getattr__(self, attr): From 09299ed2f28e8a1686604064268108a8c82e484b Mon Sep 17 00:00:00 2001 From: Prithwish Mukherjee Date: Tue, 4 Oct 2022 17:59:22 +0530 Subject: [PATCH 10/10] Added a test case --- tests/test_session.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/test_session.py b/tests/test_session.py index e398e6751614..35ad736d0210 100644 --- a/tests/test_session.py +++ b/tests/test_session.py @@ -5,6 +5,7 @@ import grpc import pytest from util.meshing_workflow import new_mesh_session # noqa: F401 +from util.solver_workflow import new_solver_session # noqa: F401 from ansys.api.fluent.v0 import health_pb2, health_pb2_grpc import ansys.fluent.core as pyfluent @@ -202,3 +203,11 @@ def test_get_fluent_mode(new_mesh_session): assert session.fluent_connection.get_current_fluent_mode() == "meshing" session = session.switch_to_solver() assert session.fluent_connection.get_current_fluent_mode() == "solver" + + +@pytest.mark.fluent_231 +def test_solverworkflow_in_solver_session(new_solver_session): + solver = new_solver_session + solver_dir = dir(solver) + for attr in ("preferences", "solverworkflow", "tui", "workflow"): + assert attr in solver_dir