Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
c4b5a01
FEAT: Add 'panels' command to manage PyAEDT panels in AEDT + tests
eblanco-ansys Nov 17, 2025
2260ff6
chore: adding changelog file 6886.added.md [dependabot-skip]
pyansys-ci-bot Nov 17, 2025
80feb19
CHORE: Auto fixes from pre-commit hooks
pre-commit-ci[bot] Nov 17, 2025
d25c9a2
Update src/ansys/aedt/core/cli.py
eblanco-ansys Nov 17, 2025
61804ed
Update src/ansys/aedt/core/cli.py
eblanco-ansys Nov 17, 2025
f204e50
Update src/ansys/aedt/core/cli.py
eblanco-ansys Nov 17, 2025
6a80835
Update src/ansys/aedt/core/cli.py
eblanco-ansys Nov 17, 2025
a754c5b
Update src/ansys/aedt/core/cli.py
eblanco-ansys Nov 17, 2025
1d1af83
Update src/ansys/aedt/core/cli.py
eblanco-ansys Nov 17, 2025
99707a1
Update src/ansys/aedt/core/cli.py
eblanco-ansys Nov 17, 2025
254aad1
Update src/ansys/aedt/core/cli.py
eblanco-ansys Nov 17, 2025
1633128
Update src/ansys/aedt/core/cli.py
eblanco-ansys Nov 17, 2025
08af825
Update src/ansys/aedt/core/cli.py
eblanco-ansys Nov 17, 2025
aa36ea8
Fixed unit tests
eblanco-ansys Nov 18, 2025
89d24e3
Merge branch 'main' into feat/cli-add-panels
eblanco-ansys Nov 18, 2025
e3204de
Unit test fix
eblanco-ansys Nov 18, 2025
50232db
Fixed unit tests
eblanco-ansys Nov 18, 2025
b5a4a4e
Decorate tests with patch
eblanco-ansys Nov 20, 2025
4f53938
Added automatic version detection
eblanco-ansys Nov 21, 2025
9ee7309
Merge branch 'main' into feat/cli-add-panels
eblanco-ansys Nov 21, 2025
6e5302e
Panels tests
eblanco-ansys Nov 21, 2025
93c1b53
Minor fixes
eblanco-ansys Nov 21, 2025
74e1120
Merge branch 'main' into feat/cli-add-panels
eblanco-ansys Nov 21, 2025
f26068a
CHORE: Auto fixes from pre-commit hooks
pre-commit-ci[bot] Nov 21, 2025
5d0bfb4
Fixed unit test
eblanco-ansys Nov 22, 2025
6f8622b
CHORE: Auto fixes from pre-commit hooks
pre-commit-ci[bot] Nov 22, 2025
dfcb7da
Improved code coverage
eblanco-ansys Nov 24, 2025
f547dcb
CHORE: Auto fixes from pre-commit hooks
pre-commit-ci[bot] Nov 24, 2025
3a4b732
Merge branch 'main' into feat/cli-add-panels
Samuelopez-ansys Nov 24, 2025
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/6886.added.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add panels command to manage PyAEDT panels in AEDT + tests
145 changes: 145 additions & 0 deletions src/ansys/aedt/core/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import sys
import threading
import time
from pathlib import Path

import psutil

Expand All @@ -38,6 +39,8 @@
)

app = typer.Typer(help="CLI for PyAEDT", no_args_is_help=True)
panels_app = typer.Typer(help="Manage PyAEDT panels in AEDT", no_args_is_help=True)
app.add_typer(panels_app, name="panels")


def _is_valid_process(proc: psutil.Process) -> bool:
Expand Down Expand Up @@ -331,5 +334,147 @@ def stop(
return


@panels_app.command("add")
def add_panels(
aedt_version: str = typer.Option(
None,
"--version",
"-v",
help="AEDT version (e.g. 2025.2)",
prompt="Enter AEDT version",
),
personal_lib: str = typer.Option(
None,
"--personal-lib",
"-p",
help="Path to AEDT PersonalLib folder",
prompt="Enter path to PersonalLib folder",
),
skip_version_manager: bool = typer.Option(
False,
"--skip-version-manager",
help="Skip installing the Version Manager tab",
),
):
"""Add PyAEDT panels to AEDT installation.

This command installs PyAEDT tabs (Console, Jupyter, Run Script, Extension Manager,
and optionally Version Manager) into your AEDT installation.

Examples:
pyaedt panels add --version 2025.2 --personal-lib "C:\\Users\\username\\AppData\\Roaming\\Ansoft\\PersonalLib"
pyaedt panels add -v 2025.2 -p "/home/username/Ansoft/PersonalLib"
"""
try:
# Validate AEDT version format
if not aedt_version or not isinstance(aedt_version, str):
typer.secho(
"✗ Invalid AEDT version. Please provide a valid version string (e.g. 2025.2)",
fg=typer.colors.RED,
bold=True,
)
raise typer.Exit(code=1)

aedt_version = aedt_version.strip()
if not aedt_version:
typer.secho("✗ AEDT version cannot be empty", fg=typer.colors.RED, bold=True)
raise typer.Exit(code=1)

# Validate personal_lib path
if not personal_lib or not isinstance(personal_lib, str):
typer.secho(
"✗ Invalid PersonalLib path. Please provide a valid path",
fg=typer.colors.RED,
bold=True,
)
raise typer.Exit(code=1)

personal_lib = personal_lib.strip()
if not personal_lib:
typer.secho(
"✗ Invalid PersonalLib path. Please provide a valid path",
fg=typer.colors.RED,
bold=True,
)
raise typer.Exit(code=1)

personal_lib_path = Path(personal_lib)

if not personal_lib_path.exists():
typer.secho(
f"✗ PersonalLib path does not exist: {personal_lib_path}",
fg=typer.colors.RED,
bold=True,
)
typer.echo("\nCommon PersonalLib locations:")
if platform.system() == "Windows":
typer.secho(
" Windows: C:\\Users\\<username>\\AppData\\Roaming\\Ansoft\\PersonalLib",
fg=typer.colors.CYAN,
)
else:
typer.secho(
" Linux: /home/<username>/Ansoft/PersonalLib",
fg=typer.colors.CYAN,
)
raise typer.Exit(code=1)

if not personal_lib_path.is_dir():
typer.secho(
f"✗ PersonalLib path is not a directory: {personal_lib_path}",
fg=typer.colors.RED,
bold=True,
)
raise typer.Exit(code=1)

# Import and run the installer
typer.secho(
f"Installing PyAEDT panels for AEDT {aedt_version}...",
fg=typer.colors.BLUE,
bold=True,
)
typer.secho(f"PersonalLib location: {personal_lib_path}", fg=typer.colors.CYAN)

if skip_version_manager:
typer.secho("Skipping Version Manager tab...", fg=typer.colors.YELLOW)

from ansys.aedt.core.extensions.installer.pyaedt_installer import add_pyaedt_to_aedt

result = add_pyaedt_to_aedt(
aedt_version=aedt_version,
personal_lib=str(personal_lib_path),
skip_version_manager=skip_version_manager,
odesktop=None,
)

if result is False:
typer.secho("✗ Failed to install PyAEDT panels", fg=typer.colors.RED, bold=True)
raise typer.Exit(code=1)

typer.secho("✓ PyAEDT panels installed successfully!", fg=typer.colors.GREEN, bold=True)
typer.echo("\nInstalled panels:")
typer.secho(" • Console", fg=typer.colors.GREEN)
typer.secho(" • Jupyter", fg=typer.colors.GREEN)
typer.secho(" • Run Script", fg=typer.colors.GREEN)
typer.secho(" • Extension Manager", fg=typer.colors.GREEN)
if not skip_version_manager:
typer.secho(" • Version Manager", fg=typer.colors.GREEN)
typer.secho(
"\nRestart AEDT to see the new panels in the Automation tab.",
fg=typer.colors.YELLOW,
bold=True,
)

except typer.Exit:
raise
except ImportError as e:
typer.secho(f"✗ Import error: {str(e)}", fg=typer.colors.RED, bold=True)
typer.echo("Make sure PyAEDT is properly installed.")
raise typer.Exit(code=1)
except Exception as e:
typer.secho(f"✗ Error installing panels: {str(e)}", fg=typer.colors.RED, bold=True)
raise typer.Exit(code=1)


if __name__ == "__main__":
app()
Loading
Loading