Skip to content

Commit 2ed94b1

Browse files
authored
Refactor version handling (#1205)
* Refactor server_to_ansys_version * Update minimal server version supported * Remove server_to_ansys_grpc_dpf_version and use min_server_version instead. * Add version parsing for comparison within check_ansys_grpc_dpf_version() * Add testing * Add testing
1 parent 8605173 commit 2ed94b1

File tree

4 files changed

+62
-54
lines changed

4 files changed

+62
-54
lines changed

src/ansys/dpf/core/_version.py

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,31 @@
44

55
# Nice string for the version
66
__version__ = ".".join(map(str, version_info))
7-
min_server_version = "2.0"
87

9-
server_to_ansys_grpc_dpf_version = {
10-
"1.0": "==0.2.2",
11-
"2.0": "==0.3.0",
12-
"3.0": ">=0.4.0",
13-
"4.0": ">=0.5.0",
14-
"5.0": ">=0.6.0",
15-
"6.0": ">=0.7.0",
16-
"7.0": ">=0.8dev",
17-
}
8+
# Minimal DPF server version supported
9+
min_server_version = "4.0"
1810

19-
server_to_ansys_version = {
20-
"1.0": "2021R1",
21-
"2.0": "2021R2",
22-
"3.0": "2022R1",
23-
"4.0": "2022R2",
24-
"5.0": "2023R1",
25-
"6.0": "2023R2",
26-
"6.1": "2023R2",
27-
"6.2": "2023R2",
28-
"7.0": "2024R1",
29-
"7.1": "2024R1",
30-
}
11+
12+
class ServerToAnsysVersion:
13+
legacy_version_map = {
14+
"1.0": "2021R1",
15+
"2.0": "2021R2",
16+
"3.0": "2022R1",
17+
"4.0": "2022R2",
18+
"5.0": "2023R1",
19+
"6.0": "2023R2",
20+
"6.1": "2023R2",
21+
"6.2": "2023R2",
22+
"7.0": "2024R1",
23+
"7.1": "2024R1",
24+
}
25+
26+
def __getitem__(self, item):
27+
if len(item) == 3:
28+
return self.legacy_version_map[item]
29+
else:
30+
split = item.split('.')
31+
return split[0]+'R'+split[1]
32+
33+
34+
server_to_ansys_version = ServerToAnsysVersion()

src/ansys/dpf/core/server_types.py

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@
2121
from ansys.dpf.core.check_version import server_meet_version
2222
from ansys.dpf.core import errors, server_factory
2323
from ansys.dpf.core._version import (
24-
server_to_ansys_grpc_dpf_version,
24+
min_server_version,
2525
server_to_ansys_version,
26+
__version__
2627
)
2728
from ansys.dpf.core import server_context
2829
from ansys.dpf.gate import load_api, data_processing_grpcapi
@@ -323,8 +324,8 @@ def _compare_ansys_grpc_dpf_version(right_grpc_module_version_str: str, grpc_mod
323324

324325

325326
def check_ansys_grpc_dpf_version(server, timeout):
326-
import ansys.grpc.dpf
327327
import grpc
328+
from packaging import version
328329

329330
state = grpc.channel_ready_future(server.channel)
330331
# verify connection has matured
@@ -336,37 +337,12 @@ def check_ansys_grpc_dpf_version(server, timeout):
336337
raise TimeoutError(
337338
f"Failed to connect to {server._input_ip}:{server._input_port} in {timeout} seconds"
338339
)
339-
compatibility_link = (
340-
f"https://dpf.docs.pyansys.com/getting_started/" f"index.html#client-server-compatibility"
341-
)
342340
LOG.debug("Established connection to DPF gRPC")
343-
grpc_module_version = ansys.grpc.dpf.__version__
344-
server_version = server.version
345-
right_grpc_module_version = server_to_ansys_grpc_dpf_version.get(server_version, None)
346-
if right_grpc_module_version is None: # pragma: no cover
347-
# warnings.warn(f"No requirement specified on ansys-grpc-dpf for server version "
348-
# f"{server_version}. Continuing with the ansys-grpc-dpf version "
349-
# f"installed ({grpc_module_version}). In case of unexpected instability, "
350-
# f"please refer to the compatibility guidelines given in "
351-
# f"{compatibility_link}.")
352-
return
353-
if not _compare_ansys_grpc_dpf_version(right_grpc_module_version, grpc_module_version):
354-
ansys_version_to_use = server_to_ansys_version.get(server_version, "Unknown")
355-
ansys_versions = core._version.server_to_ansys_version
356-
latest_ansys = ansys_versions[max(ansys_versions.keys())]
357-
raise ImportWarning(
358-
f"An incompatibility has been detected between the DPF server version "
359-
f"({server_version} "
360-
f"from Ansys {ansys_version_to_use})"
361-
f" and the ansys-grpc-dpf version installed ({grpc_module_version})."
362-
f" Please consider using the latest DPF server available in the "
363-
f"{latest_ansys} Ansys unified install.\n"
364-
f"To follow the compatibility guidelines given in "
365-
f"{compatibility_link} while still using DPF server {server_version}, "
366-
f"please install version {right_grpc_module_version} of ansys-grpc-dpf"
367-
f" with the command: \n"
368-
f" pip install ansys-grpc-dpf{right_grpc_module_version}"
369-
)
341+
if version.parse(server.version) < version.parse(min_server_version):
342+
raise ValueError(f"Error connecting to DPF LegacyGrpcServer with version {server.version} "
343+
f"(ANSYS {server_to_ansys_version[server.version]}): "
344+
f"ansys-dpf-core {__version__} does not support DPF servers below "
345+
f"{min_server_version} ({server_to_ansys_version[min_server_version]}).")
370346

371347

372348
class GhostServer:

tests/test_checkversion.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,9 @@ def test_find_outdated_ansys_version():
9797
assert _find_outdated_ansys_version(arg5) == False
9898
assert _find_outdated_ansys_version(arg6) == False
9999
assert _find_outdated_ansys_version(arg7) == True
100+
101+
102+
def test_version():
103+
from ansys.dpf.core._version import server_to_ansys_version
104+
assert server_to_ansys_version["1.0"] == "2021R1"
105+
assert server_to_ansys_version["2099.9"] == "2099R9"

tests/test_server.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,3 +288,25 @@ def test_start_after_shutting_down_server():
288288
info = remote_server.info
289289
remote_server.shutdown()
290290
assert info is not None
291+
292+
293+
def test_check_ansys_grpc_dpf_version_raise():
294+
remote_server = start_local_server(
295+
config=dpf.core.AvailableServerConfigs.LegacyGrpcServer, as_global=False
296+
)
297+
298+
class MockServer:
299+
def __init__(self, server):
300+
for attribute in ["channel", "_input_ip", "_input_port"]:
301+
setattr(self, attribute, getattr(server, attribute))
302+
303+
@property
304+
def version(self):
305+
return "1.0"
306+
307+
print(MockServer(remote_server).version)
308+
with pytest.raises(
309+
ValueError,
310+
match="Error connecting to DPF LegacyGrpcServer with version 1.0"
311+
):
312+
dpf.core.server_types.check_ansys_grpc_dpf_version(MockServer(remote_server), timeout=2.0)

0 commit comments

Comments
 (0)