Skip to content

Commit 771f568

Browse files
improve runtime client config (#1314)
* improve runtime client config * Update src/ansys/dpf/core/server_types.py * Update src/ansys/dpf/core/settings.py * Update src/ansys/dpf/core/settings.py * fix --------- Co-authored-by: Edu Ramos Fernandez <[email protected]>
1 parent 790a062 commit 771f568

File tree

7 files changed

+73
-24
lines changed

7 files changed

+73
-24
lines changed

src/ansys/dpf/core/core.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -504,21 +504,6 @@ def release_dpf(self):
504504
else:
505505
error = self._api.data_processing_release(1)
506506

507-
def get_runtime_client_config(self):
508-
if self._server().has_client():
509-
data_tree_tmp = self._api.data_processing_get_client_config_as_data_tree()
510-
config_to_return = RuntimeClientConfig(data_tree=data_tree_tmp, server=self._server())
511-
else:
512-
if misc.RUNTIME_CLIENT_CONFIG is None:
513-
from ansys.dpf.core import data_tree
514-
515-
misc.RUNTIME_CLIENT_CONFIG = RuntimeClientConfig(
516-
data_tree=data_tree.DataTree(server=self._server())
517-
)
518-
misc.RUNTIME_CLIENT_CONFIG._data_tree._holds_server = False
519-
config_to_return = misc.RUNTIME_CLIENT_CONFIG
520-
return config_to_return
521-
522507
@version_requires("4.0")
523508
def get_runtime_core_config(self):
524509
if self._server().has_client():

src/ansys/dpf/core/data_tree.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -653,6 +653,9 @@ def __exit__(self, type_to_use, value, tb):
653653
else:
654654
print(tb)
655655

656+
def to_dict(self):
657+
return self._dict
658+
656659
def __del__(self):
657660
if not self._is_exited:
658661
self._is_exited = True

src/ansys/dpf/core/runtime_config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,9 @@ def return_arrays(self):
134134
def return_arrays(self, value):
135135
self._data_tree.add(return_arrays=int(value))
136136

137+
def copy_config(self, config):
138+
config._data_tree.add(self._data_tree.to_dict())
139+
137140

138141
class RuntimeCoreConfig(_RuntimeConfig):
139142
"""Enables to access and set runtime configuration

src/ansys/dpf/core/server_types.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -640,12 +640,20 @@ def __del__(self):
640640

641641

642642
class GrpcClient:
643-
def __init__(self, address=None):
643+
def __init__(self):
644644
from ansys.dpf.gate import client_capi
645645

646-
self._internal_obj = client_capi.ClientCAPI.client_new_full_address(address)
647646
client_capi.ClientCAPI.init_client_environment(self)
648647

648+
def set_address(self, address, server):
649+
from ansys.dpf.core import misc, settings
650+
if misc.RUNTIME_CLIENT_CONFIG is not None:
651+
self_config = settings.get_runtime_client_config(server=server)
652+
misc.RUNTIME_CLIENT_CONFIG.copy_config(self_config)
653+
from ansys.dpf.gate import client_capi
654+
self._internal_obj = client_capi.ClientCAPI.client_new_full_address(address)
655+
656+
649657
def __del__(self):
650658
try:
651659
self._deleter_func[0](self._deleter_func[1](self))
@@ -676,6 +684,8 @@ def __init__(
676684
super().__init__(ansys_path=ansys_path, load_operators=load_operators)
677685
# Load Ans.Dpf.GrpcClient
678686
self._grpc_client_path = load_api.load_grpc_client(ansys_path=ansys_path)
687+
688+
self._client = GrpcClient()
679689
self._own_process = launch_server
680690
self._local_server = False
681691
self._os = None
@@ -709,8 +719,8 @@ def __init__(
709719
launch_dpf(ansys_path, ip, port, timeout=timeout)
710720
self._local_server = True
711721

712-
self._client = GrpcClient(address)
713722
# store port and ip for later reference
723+
self._client.set_address(address, self)
714724
self._address = address
715725
self._input_ip = ip
716726
self._input_port = port
@@ -1011,6 +1021,8 @@ def __init__(
10111021
self._own_process = launch_server
10121022
self.live = False
10131023
self._local_server = False
1024+
self._stubs = {}
1025+
self.channel = None
10141026

10151027
# Load Ans.Dpf.Grpc?
10161028
import grpc
@@ -1048,7 +1060,10 @@ def __init__(
10481060
else:
10491061
launch_dpf(ansys_path, ip, port, timeout=timeout)
10501062
self._local_server = True
1051-
1063+
from ansys.dpf.core import misc, settings
1064+
if misc.RUNTIME_CLIENT_CONFIG is not None:
1065+
self_config = settings.get_runtime_client_config(server=self)
1066+
misc.RUNTIME_CLIENT_CONFIG.copy_config(self_config)
10521067
self.channel = grpc.insecure_channel(address)
10531068

10541069
# store the address for later reference
@@ -1057,7 +1072,6 @@ def __init__(
10571072
self._input_port = port
10581073
self.live = True
10591074
self.ansys_path = ansys_path
1060-
self._stubs = {}
10611075

10621076
self._create_shutdown_funcs()
10631077

@@ -1086,7 +1100,7 @@ def get_api_for_type(self, capi, grpcapi):
10861100
return grpcapi
10871101

10881102
def create_stub_if_necessary(self, stub_name, stub_type):
1089-
if not (stub_name in self._stubs.keys()):
1103+
if self.channel and not stub_name in self._stubs:
10901104
self._stubs[stub_name] = stub_type(self.channel)
10911105

10921106
def get_stub(self, stub_name):

src/ansys/dpf/core/settings.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
from ansys.dpf.core.server_context import set_default_server_context # noqa: F401
1111
from ansys.dpf.core.server_factory import ServerConfig # noqa: F401
1212
from ansys.dpf.core import core
13+
from ansys.dpf.gate import (
14+
data_processing_capi,
15+
data_processing_grpcapi,
16+
)
1317

1418

1519
def disable_off_screen_rendering() -> None:
@@ -121,8 +125,24 @@ def get_runtime_client_config(server=None):
121125
with Ans.Dpf.GrpcClient configuration.
122126
123127
"""
124-
base = core.BaseService(server, load_operators=False)
125-
return base.get_runtime_client_config()
128+
from ansys.dpf.core.runtime_config import RuntimeClientConfig
129+
from ansys.dpf import core as root
130+
if server is None:
131+
server = root.SERVER
132+
if server is not None and server.has_client():
133+
_api = server.get_api_for_type(
134+
capi=data_processing_capi.DataProcessingCAPI,
135+
grpcapi=data_processing_grpcapi.DataProcessingGRPCAPI,
136+
)
137+
_api.init_data_processing_environment(server) # creates stub when gRPC
138+
data_tree_tmp = _api.data_processing_get_client_config_as_data_tree()
139+
config_to_return = RuntimeClientConfig(data_tree=data_tree_tmp, server=server)
140+
else:
141+
if misc.RUNTIME_CLIENT_CONFIG is None:
142+
from ansys.dpf.gate import misc as gate_misc
143+
misc.RUNTIME_CLIENT_CONFIG = gate_misc.client_config()
144+
config_to_return = misc.RUNTIME_CLIENT_CONFIG
145+
return config_to_return
126146

127147

128148
def get_runtime_core_config(server=None):

src/ansys/dpf/gate/misc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,4 @@ def client_config():
2727
_CLIENT_CONFIG.streaming_buffer_size = DEFAULT_FILE_CHUNK_SIZE
2828
_CLIENT_CONFIG.stream_floats_instead_of_doubles = False
2929
_CLIENT_CONFIG.return_arrays = True
30-
return _CLIENT_CONFIG
30+
return _CLIENT_CONFIG

tests/entry/test_entry.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,30 @@ def test_apply_context_remote(remote_config_server_type):
105105
assert dpf.SERVER.context == dpf.AvailableServerContexts.premium
106106

107107

108+
@pytest.mark.order(5)
109+
@conftest.raises_for_servers_version_under("4.0")
110+
def test_runtime_client_no_server(remote_config_server_type):
111+
dpf.server.shutdown_all_session_servers()
112+
dpf.SERVER_CONFIGURATION = remote_config_server_type
113+
client_config = dpf.settings.get_runtime_client_config()
114+
initial = client_config.stream_floats_instead_of_doubles
115+
client_config.stream_floats_instead_of_doubles = True
116+
server = dpf.start_local_server(as_global=False)
117+
client_config = dpf.settings.get_runtime_client_config(server)
118+
assert client_config.stream_floats_instead_of_doubles is True
119+
120+
121+
server = dpf.connect_to_server(
122+
ip=server.ip, port=server.port, as_global=False)
123+
client_config = dpf.settings.get_runtime_client_config(server)
124+
assert client_config.stream_floats_instead_of_doubles is True
125+
126+
dpf.server.shutdown_all_session_servers()
127+
client_config = dpf.settings.get_runtime_client_config()
128+
client_config.stream_floats_instead_of_doubles = initial
129+
assert client_config.stream_floats_instead_of_doubles == initial
130+
131+
108132
@pytest.mark.order("last") # Mandatory
109133
@pytest.mark.skipif(
110134
running_docker or not conftest.SERVERS_VERSION_GREATER_THAN_OR_EQUAL_TO_5_0,

0 commit comments

Comments
 (0)