Skip to content

Commit 7b5d0e5

Browse files
Handle project save state from client side when closing (#198)
1 parent 45ff55c commit 7b5d0e5

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

src/ansys/rocky/core/rocky_api_proxies.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,3 +165,16 @@ def serialize(cls, obj: "ApiExportToolkitProxy") -> dict:
165165
"__class__": cls.__name__,
166166
"_session_uid": obj._session_uid if obj._session_uid is not None else None,
167167
}
168+
169+
170+
class ApiProjectProxy(ApiElementProxy):
171+
def __init__(self, pyro_api: Pyro5.api.Proxy, session_uid: str | None = None) -> None:
172+
super().__init__(pyro_api, 'project', session_uid)
173+
174+
def CloseProject(self, check_save_state: bool = True) -> None:
175+
if check_save_state and self.HasUnsavedChanges():
176+
raise RuntimeError(
177+
"Project has unsaved changes. Save the project before closing or use check_save_state=False."
178+
)
179+
180+
self._pyro_api.SendToApiElement(self._pool_id, "CloseProject", check_save_state=check_save_state)

src/ansys/rocky/core/serializers.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
ApiExportToolkitProxy,
3535
ApiGridFunctionProxy,
3636
ApiListProxy,
37+
ApiProjectProxy,
3738
)
3839

3940

@@ -46,6 +47,9 @@ def register_proxies() -> None:
4647
Pyro5.api.register_dict_to_class(
4748
"ApiExportToolkitProxy", deserialize_api_exporttoolkit
4849
)
50+
Pyro5.api.register_dict_to_class(
51+
"ApiProjectProxy", deserialize_api_project
52+
)
4953
Pyro5.api.register_dict_to_class("RockyApiError", deserialize_api_error)
5054
Pyro5.api.register_dict_to_class("ndarray", deserialize_numpy)
5155

@@ -170,6 +174,30 @@ def deserialize_api_exporttoolkit(
170174
return ApiExportToolkitProxy(proxy, session_uid)
171175

172176

177+
def deserialize_api_project(
178+
classname: str, serialized: dict
179+
) -> ApiProjectProxy:
180+
"""Deserialize the proxy objects for the API project.
181+
182+
Parameters
183+
----------
184+
classname : str
185+
Name of the class to deserialize. This parameter is required by the
186+
superclass but is not used.
187+
serialized : dict
188+
Dictionary of serialized objects.
189+
190+
Returns
191+
-------
192+
ApiProjectProxy
193+
Deserialized object.
194+
"""
195+
session_uid = serialized.get("_session_uid")
196+
proxy = _GetProxyInstance(session_uid)
197+
198+
return ApiProjectProxy(proxy, session_uid)
199+
200+
173201
def deserialize_api_error(classname: str, serialized: dict) -> Exception:
174202
"""Deserialize an API error.
175203

0 commit comments

Comments
 (0)