Skip to content

Commit ff3fb09

Browse files
Centralize open project
1 parent 95eabe5 commit ff3fb09

2 files changed

Lines changed: 42 additions & 10 deletions

File tree

src/ansys/aedt/core/application/design.py

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1506,7 +1506,7 @@ def oproject(self) -> _OProject:
15061506
15071507
Returns
15081508
-------
1509-
Project object
1509+
Project object
15101510
15111511
References
15121512
----------
@@ -1574,9 +1574,7 @@ def oproject(self, proj_name: str = None) -> None:
15741574
else: # pragma: no cover
15751575
raise RuntimeError("Project is locked. Close or remove the lock before proceeding.")
15761576
self.logger.info("AEDT project found. Loading it.")
1577-
self._oproject = self.odesktop.OpenProject(project)
1578-
self._add_handler()
1579-
self.logger.info("Project %s has been opened.", self._oproject.GetName())
1577+
self._oproject = self._open_project(project)
15801578
time.sleep(0.5)
15811579
else:
15821580
oTool = self.odesktop.GetTool("ImportExport")
@@ -1602,12 +1600,10 @@ def oproject(self, proj_name: str = None) -> None:
16021600
remove_project_lock(proj_name)
16031601
else: # pragma: no cover
16041602
raise RuntimeError("Project is locked. Close or remove the lock before proceeding.")
1605-
self._oproject = self.odesktop.OpenProject(proj_name)
1603+
self._oproject = self._open_project(proj_name)
16061604
if not is_windows and settings.aedt_version:
16071605
time.sleep(1)
16081606
self.desktop_class.close_windows()
1609-
self._add_handler()
1610-
self.logger.info("Project %s has been opened.", self._oproject.GetName())
16111607
time.sleep(0.5)
16121608
elif settings.force_error_on_missing_project and ".aedt" in proj_name:
16131609
raise Exception("Project doesn't exist. Check it and retry.")
@@ -1652,6 +1648,43 @@ def _add_handler(self) -> None:
16521648
project_name=self.project_name,
16531649
)
16541650

1651+
@pyaedt_function_handler()
1652+
def _open_project(self, project_path: str) -> _OProject:
1653+
"""Open a project and ensure the active project object is resolved.
1654+
1655+
This centralizes logic around calling ``oDesktop.OpenProject`` and
1656+
handling cases where the method does not return the project object
1657+
correctly by falling back to ``check_if_project_is_loaded``.
1658+
1659+
Returns
1660+
-------
1661+
Project object
1662+
1663+
References
1664+
----------
1665+
>>> oDesktop.OpenProject
1666+
1667+
"""
1668+
if is_project_locked(project_path):
1669+
if self._remove_lock: # pragma: no cover
1670+
self.logger.warning("Project is locked. Removing it and opening.")
1671+
remove_project_lock(project_path)
1672+
else: # pragma: no cover
1673+
raise RuntimeError("Project is locked. Close or remove the lock before proceeding.")
1674+
1675+
proj = self.odesktop.OpenProject(project_path)
1676+
if not proj:
1677+
pname = self.check_if_project_is_loaded(project_path)
1678+
if not pname: # pragma: no cover
1679+
raise Exception("Failed to open project due to unexpected reason. Check it and retry.")
1680+
proj = self.desktop_class.active_project(pname)
1681+
1682+
# Ensure handlers and logging are set up for the opened project.
1683+
self._oproject = proj
1684+
self._add_handler()
1685+
self.logger.info("Project %s has been opened.", self._oproject.GetName())
1686+
return cast(_OProject, proj)
1687+
16551688
@property
16561689
def desktop_install_dir(self) -> str:
16571690
"""AEDT installation directory.
@@ -3156,7 +3189,7 @@ def load_project(
31563189
>>> app.load_project(r"C:\\temp\\project.aedt")
31573190
31583191
"""
3159-
proj = self.odesktop.OpenProject(file_name)
3192+
proj = self._open_project(file_name)
31603193
if close_active and self.oproject:
31613194
self._close_edb()
31623195
self.close_project(self.project_name, save=set_active)
@@ -4289,7 +4322,7 @@ def copy_design_from(
42894322
project = Path(project)
42904323
# open the origin project
42914324
if project.exists():
4292-
proj_from = self.odesktop.OpenProject(str(project))
4325+
proj_from = self._open_project(str(project))
42934326
proj_from_name = proj_from.GetName()
42944327
else:
42954328
return None

src/ansys/aedt/core/icepak.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2122,7 +2122,6 @@ def copy_group_from(
21222122
active_project = self.desktop_class.active_project()
21232123
else:
21242124
self.oproject = source_project_path
2125-
# self._desktop.OpenProject(source_project_path)
21262125
active_project = self.desktop_class.active_project(source_project_name)
21272126

21282127
active_design = self.desktop_class.active_design(active_project, source_design)

0 commit comments

Comments
 (0)