Skip to content

Gprc checks #1264

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jun 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
46 changes: 46 additions & 0 deletions _unittest/test_00_grpc.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from _unittest.conftest import BasisTest
from _unittest.conftest import config
from pyaedt import Desktop
from pyaedt.generic.general_methods import grpc_active_sessions

try:
import pytest # noqa: F401
except ImportError:
import _unittest_ironpython.conf_unittest as pytest # noqa: F401

from pyaedt.generic.general_methods import is_ironpython
from pyaedt import settings

test_project_name = "Coax_HFSS"

if not is_ironpython and config["desktopVersion"] >= "2022.2":

class TestClass(BasisTest, object):
def setup_class(self):
settings.use_grpc_api = True

def teardown_class(self):
settings.use_grpc_api = config["use_grpc"]

def test_00_destkop(self):
d = Desktop(specified_version="2022.2", new_desktop_session=True)
assert d.port in grpc_active_sessions()
d.release_desktop(False, False)

def test_01_destkop_existing(self):
d = Desktop(specified_version="2022.2", new_desktop_session=False)
assert d.port in grpc_active_sessions()
d.release_desktop(False, False)

def test_02_destkop_new(self):
d = Desktop(specified_version="2022.2", new_desktop_session=True)
assert d.port in grpc_active_sessions()
d.release_desktop(False, False)

def test_03_destkop_release(self):
d = Desktop(specified_version="2022.2", new_desktop_session=False)
assert d.port in grpc_active_sessions()
d.release_desktop()
d = Desktop(specified_version="2022.2", new_desktop_session=False)
assert d.port in grpc_active_sessions()
d.release_desktop()
6 changes: 5 additions & 1 deletion pyaedt/application/Analysis3D.py
Original file line number Diff line number Diff line change
Expand Up @@ -609,12 +609,16 @@ def assign_material(self, obj, mat):
"Selections:=",
szSelections,
]
if self.design_type == "HFSS":
solve_inside = matobj.is_dielectric()
else:
solve_inside = True
vArg2 = [
"NAME:Attributes",
"MaterialValue:=",
'"{}"'.format(matobj.name),
"SolveInside:=",
matobj.is_dielectric(),
solve_inside,
"ShellElement:=",
False,
"ShellElementThickness:=",
Expand Down
31 changes: 24 additions & 7 deletions pyaedt/desktop.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@

from pyaedt.misc import list_installed_ansysem
from pyaedt import pyaedt_function_handler
from pyaedt.generic.general_methods import is_ironpython, _pythonver, inside_desktop
from pyaedt.generic.general_methods import is_ironpython, _pythonver, inside_desktop, grpc_active_sessions
from pyaedt import settings

from pyaedt import aedt_logger, __version__
Expand Down Expand Up @@ -468,7 +468,7 @@ def _init_desktop(self):
self._main.sDesktopinstallDirectory = self._main.oDesktop.GetExeDir()
self._main.pyaedt_initialized = True
self._logger = aedt_logger.AedtLogger(filename=self.logfile, level=logging.DEBUG)
self._logger.info("Logger file %s in use.")
self._logger.info("Logger file %s in use.", self.logfile)
self._main.aedt_logger = self._logger

def _set_version(self, specified_version, student_version):
Expand Down Expand Up @@ -630,13 +630,30 @@ def _init_cpython_new(self, non_graphical, new_aedt_session, version, student_ve
launch_msg = "AEDT installation Path {}".format(base_path)
self.logger.info(launch_msg)
self.logger.info("Launching AEDT with PyDesktopPlugin.")
if new_aedt_session or not self.port:
if (
not self.port
and not new_aedt_session
and self.machine not in ["localhost", "127.0.0.1", socket.getfqdn(), socket.getfqdn().split(".")[0]]
):
sessions = grpc_active_sessions(
version=version, student_version=student_version, non_graphical=non_graphical
)
if sessions:
self.port = sessions[0]
if len(sessions):
self.logger.info("Found active GRPC session on port %s", self.port)
else:
self.logger.warning(
"Multiple AEDT GRPC Session Found. Setting active session on port %s", self.port
)
elif new_aedt_session or not self.port:
self.port = _find_free_port()
self.logger.info("New Desktop session will start on GRPC port %s", self.port)
self.machine = ""
elif self.port:
self.logger.info("Connecting to Aedt session on GRPC port %s", self.port)

if new_aedt_session:
ScriptEnv._doInitialize(version, None, new_aedt_session, non_graphical, "", self.port)
else:
if not new_aedt_session:
# Local server running
if not self.machine:
if _check_grpc_port(self.port):
Expand All @@ -651,7 +668,7 @@ def _init_cpython_new(self, non_graphical, new_aedt_session, version, student_ve
self.machine = socket.getfqdn()
elif self.machine not in ["localhost", "127.0.0.1", socket.getfqdn(), socket.getfqdn().split(".")[0]]:
settings.remote_api = True
ScriptEnv._doInitialize(version, None, new_aedt_session, non_graphical, self.machine, self.port)
ScriptEnv._doInitialize(version, None, new_aedt_session, non_graphical, self.machine, self.port)

if "oAnsoftApplication" in dir(self._main):
self._main.isoutsideDesktop = True
Expand Down
43 changes: 43 additions & 0 deletions pyaedt/generic/general_methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@

is_remote_server = os.getenv("PYAEDT_IRONPYTHON_SERVER", "False").lower() in ("true", "1", "t")

if not is_ironpython:
import psutil


class MethodNotSupportedError(Exception):
""" """
Expand Down Expand Up @@ -684,6 +687,46 @@ def _create_json_file(json_dict, full_json_path):
return True


@pyaedt_function_handler()
def grpc_active_sessions(version=None, student_version=False, non_graphical=False):
"""Return the active grpc aedt session inf.

Parameters
----------
version : str, optional
String of the version to check. By default checks on every version. Options are "222" or "2022.2".
student_version : bool, optional
Either if check for student version session or not.
non_graphical : bool, optional
Either to check for active graphical or non graphical sessions.

Returns
-------
list
List of grpc port.
"""
if student_version:
keys = ["ansysedtsv.exe"]
else:
keys = ["ansysedt.exe"]
if version and "." in version:
version = version[-4:].replace(".", "")
sessions = []
for p in psutil.process_iter():
try:
if p.name() in keys:
cmd = p.cmdline()
if "-grpcsrv" in cmd:
if non_graphical and "-ng" in cmd or not non_graphical:
if not version or (version and version in cmd[0]):
sessions.append(
int(cmd[cmd.index("-grpcsrv") + 1]),
)
except:
pass
return sessions


class Settings(object):
"""Class that manages all PyAEDT Environment Variables and global settings."""

Expand Down
4 changes: 4 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,7 @@ ipython==8.3.0

jupyterlab==3.4.3
# License: BSD-3-Clause License

psutil==5.9.0
# License: BSD-3-Clause License

2 changes: 2 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ def install(package):
"numpy",
"ipython",
"matplotlib",
"psutil",
]
install("https://github.com/pyansys/PyAEDT/raw/release/0.3/pythonnet-2.5.2-cp39-cp39-win_amd64.whl")
elif sys.version_info >= (3, 0):
Expand All @@ -47,6 +48,7 @@ def install(package):
"numpy",
"ipython",
"matplotlib",
"psutil",
]
elif not is_ironpython and sys.version_info < (3, 0):
install_requires = ["pywin32 == 228;platform_system=='Windows'", "pythonnet >= 2.5.2;platform_system=='Windows'"]
Expand Down