From 4864c9737c5144835c2ccd6799aac7e8f5463511 Mon Sep 17 00:00:00 2001 From: Devin Date: Wed, 2 Apr 2025 07:46:23 +0200 Subject: [PATCH 1/6] Fix #5623 - copy_design_from updates the current design correctly. - Added get_example() to desktop to retrieve the path of an example file #5992 - Update unit test. --- src/ansys/aedt/core/application/design.py | 2 +- src/ansys/aedt/core/desktop.py | 39 +++++++++++++++++++++++ tests/system/general/test_01_Design.py | 5 +++ 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/ansys/aedt/core/application/design.py b/src/ansys/aedt/core/application/design.py index d5cde606662..7b2da352740 100644 --- a/src/ansys/aedt/core/application/design.py +++ b/src/ansys/aedt/core/application/design.py @@ -3639,7 +3639,7 @@ def copy_design_from(self, project, design, save_project=True, set_active_design if set_active_design: self._close_edb() self._init_design(project_name=self.project_name, design_name=new_designname) - self.set_active_design(active_design) + self.set_active_design(new_designname) # return the pasted design name return new_designname diff --git a/src/ansys/aedt/core/desktop.py b/src/ansys/aedt/core/desktop.py index c18dd9bd626..60705a79fd2 100644 --- a/src/ansys/aedt/core/desktop.py +++ b/src/ansys/aedt/core/desktop.py @@ -70,6 +70,7 @@ from ansys.aedt.core.internal.aedt_versions import aedt_versions from ansys.aedt.core.internal.desktop_sessions import _desktop_sessions from ansys.aedt.core.internal.desktop_sessions import _edb_sessions +from difflib import get_close_matches pathname = Path(__file__) @@ -842,6 +843,44 @@ def install_path(self): except Exception: # pragma: no cover return self.installed_versions[version_key + "CL"] + @pyaedt_function_handler() + def get_example(self, example_name, folder_name="."): + """Retrieve the path to a built-in example project. + + Parameters + ---------- + example_name : str + Name of the example for which the full path is desired. + folder_name : str, optional + Name of the example for which the full path is desired. + + Returns + ------- + str + Return the full path and name of the example file if found, otherwise ``None``. + """ + + root = Path(self.install_path) / "Examples" / folder_name + + # Gather all files + all_files = [f for f in root.rglob("*") if f.is_file() and not f.suffix.lower() == ".pdf"] + + # Normalize names for fuzzy matching + filenames = [f.name.lower() for f in all_files] + name_lower = example_name.lower() + + # Get close matches + close = get_close_matches(name_lower, filenames, n=1, cutoff=0.6) + + if close: + match_name = close[0] + # Find the original Path object that matches the filename (case-insensitive) + for file in all_files: + if file.name.lower() == match_name: + return str(file.resolve()) + + return None + @pyaedt_function_handler() def close_windows(self): """Close all windows. diff --git a/tests/system/general/test_01_Design.py b/tests/system/general/test_01_Design.py index 72de9496339..f8e1efa031e 100644 --- a/tests/system/general/test_01_Design.py +++ b/tests/system/general/test_01_Design.py @@ -206,6 +206,11 @@ def test_15b_copy_design_from(self): new_design = self.aedtapp.copy_design_from(origin, "myduplicateddesign") assert new_design in self.aedtapp.design_list + def test_15c_copy_example(self): + example_name = self.aedtapp.desktop_class.get_example("5G_SIW_Aperture_Antenna") + self.aedtapp.copy_design_from(example_name, "0_5G Aperture Element") + assert self.aedtapp.design_name == "0_5G Aperture Element" + def test_16_renamedesign(self, add_app, test_project_file): prj_file = test_project_file(test_project_name) self.aedtapp.load_project(file_name=prj_file, design="myname", close_active=True) From 80e92269b4dd8dd98c7e0589b387921166ac4eaf Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Wed, 2 Apr 2025 12:57:33 +0200 Subject: [PATCH 2/6] Fix conflict --- src/ansys/aedt/core/desktop.py | 39 ++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/ansys/aedt/core/desktop.py b/src/ansys/aedt/core/desktop.py index 9a6366f8763..c8677b7cb12 100644 --- a/src/ansys/aedt/core/desktop.py +++ b/src/ansys/aedt/core/desktop.py @@ -31,6 +31,7 @@ import atexit import datetime +from difflib import get_close_matches import gc import os from pathlib import Path @@ -692,6 +693,44 @@ def install_path(self): except Exception: # pragma: no cover return self.installed_versions[version_key + "CL"] + @pyaedt_function_handler() + def get_example(self, example_name, folder_name="."): + """Retrieve the path to a built-in example project. + + Parameters + ---------- + example_name : str + Name of the example for which the full path is desired. + folder_name : str, optional + Name of the example for which the full path is desired. + + Returns + ------- + str + Return the full path and name of the example file if found, otherwise ``None``. + """ + + root = Path(self.install_path) / "Examples" / folder_name + + # Gather all files + all_files = [f for f in root.rglob("*") if f.is_file() and not f.suffix.lower() == ".pdf"] + + # Normalize names for fuzzy matching + filenames = [f.name.lower() for f in all_files] + name_lower = example_name.lower() + + # Get close matches + close = get_close_matches(name_lower, filenames, n=1, cutoff=0.6) + + if close: + match_name = close[0] + # Find the original Path object that matches the filename (case-insensitive) + for file in all_files: + if file.name.lower() == match_name: + return str(file.resolve()) + + return None + @property def logger(self): """AEDT logger.""" From f019bb6de13630af6c630c6aeb0ee366a0a5c27d Mon Sep 17 00:00:00 2001 From: pyansys-ci-bot <92810346+pyansys-ci-bot@users.noreply.github.com> Date: Wed, 2 Apr 2025 11:02:49 +0000 Subject: [PATCH 3/6] chore: adding changelog file 5993.fixed.md [dependabot-skip] --- doc/changelog.d/5993.fixed.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 doc/changelog.d/5993.fixed.md diff --git a/doc/changelog.d/5993.fixed.md b/doc/changelog.d/5993.fixed.md new file mode 100644 index 00000000000..2eff23b299f --- /dev/null +++ b/doc/changelog.d/5993.fixed.md @@ -0,0 +1 @@ +Copy Design #5623 \ No newline at end of file From 806e95356a7406459715273385b8d11d0d11be6b Mon Sep 17 00:00:00 2001 From: Samuel Lopez <85613111+Samuelopez-ansys@users.noreply.github.com> Date: Wed, 2 Apr 2025 14:06:42 +0200 Subject: [PATCH 4/6] Update src/ansys/aedt/core/desktop.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sébastien Morais <146729917+SMoraisAnsys@users.noreply.github.com> --- src/ansys/aedt/core/desktop.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/ansys/aedt/core/desktop.py b/src/ansys/aedt/core/desktop.py index c8677b7cb12..6006b131ba5 100644 --- a/src/ansys/aedt/core/desktop.py +++ b/src/ansys/aedt/core/desktop.py @@ -729,8 +729,6 @@ def get_example(self, example_name, folder_name="."): if file.name.lower() == match_name: return str(file.resolve()) - return None - @property def logger(self): """AEDT logger.""" From dc9d7ba1cf89e042a9f93e76efafac687694ea4f Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Wed, 2 Apr 2025 14:09:24 +0200 Subject: [PATCH 5/6] Add not existing example --- tests/system/general/test_01_Design.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/system/general/test_01_Design.py b/tests/system/general/test_01_Design.py index f8e1efa031e..b29e0da46a7 100644 --- a/tests/system/general/test_01_Design.py +++ b/tests/system/general/test_01_Design.py @@ -210,6 +210,7 @@ def test_15c_copy_example(self): example_name = self.aedtapp.desktop_class.get_example("5G_SIW_Aperture_Antenna") self.aedtapp.copy_design_from(example_name, "0_5G Aperture Element") assert self.aedtapp.design_name == "0_5G Aperture Element" + assert not self.aedtapp.desktop_class.get_example("fake_example") def test_16_renamedesign(self, add_app, test_project_file): prj_file = test_project_file(test_project_name) From 379362e1e1d930a6b2c26165b635d162a453e10e Mon Sep 17 00:00:00 2001 From: Samuelopez-ansys Date: Wed, 2 Apr 2025 14:20:07 +0200 Subject: [PATCH 6/6] Add not existing example --- tests/system/general/test_01_Design.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system/general/test_01_Design.py b/tests/system/general/test_01_Design.py index b29e0da46a7..214f3e93726 100644 --- a/tests/system/general/test_01_Design.py +++ b/tests/system/general/test_01_Design.py @@ -210,7 +210,7 @@ def test_15c_copy_example(self): example_name = self.aedtapp.desktop_class.get_example("5G_SIW_Aperture_Antenna") self.aedtapp.copy_design_from(example_name, "0_5G Aperture Element") assert self.aedtapp.design_name == "0_5G Aperture Element" - assert not self.aedtapp.desktop_class.get_example("fake_example") + assert not self.aedtapp.desktop_class.get_example("fake") def test_16_renamedesign(self, add_app, test_project_file): prj_file = test_project_file(test_project_name)