Skip to content

Commit 5892efb

Browse files
authored
Add set_runtime_environment functionality to nifgen (#1974)
* Update nifgen metadata to add set_runtime_environment functionality * Update CHANGELOG
1 parent 6083f85 commit 5892efb

File tree

9 files changed

+94
-5
lines changed

9 files changed

+94
-5
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ All notable changes to this project will be documented in this file.
5151
* #### Removed
5252
* ### `nifgen` (NI-FGEN)
5353
* #### Added
54+
* Pass Python interpreter information if the driver runtime version supports it. This is used by NI in order to better understand client usage.
5455
* #### Changed
5556
* #### Removed
5657
* ### `nimodinst` (NI-ModInst)

generated/nifgen/nifgen/_grpc_stub_interpreter.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,9 @@ def set_named_waveform_next_write_position(self, channel_name, waveform_name, re
447447
grpc_types.SetNamedWaveformNextWritePositionRequest(vi=self._vi, channel_name=channel_name, waveform_name=waveform_name, relative_to_raw=relative_to.value, offset=offset),
448448
)
449449

450+
def set_runtime_environment(self, environment, environment_version, reserved1, reserved2): # noqa: N802
451+
raise NotImplementedError('set_runtime_environment is not supported over gRPC')
452+
450453
def set_waveform_next_write_position(self, channel_name, waveform_handle, relative_to, offset): # noqa: N802
451454
self._invoke(
452455
self._client.SetWaveformNextWritePosition,

generated/nifgen/nifgen/_library.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ def __init__(self, ctypes_library):
7777
self.niFgen_SetAttributeViReal64_cfunc = None
7878
self.niFgen_SetAttributeViString_cfunc = None
7979
self.niFgen_SetNamedWaveformNextWritePosition_cfunc = None
80+
self.niFgen_SetRuntimeEnvironment_cfunc = None
8081
self.niFgen_SetWaveformNextWritePosition_cfunc = None
8182
self.niFgen_UnlockSession_cfunc = None
8283
self.niFgen_WaitUntilDone_cfunc = None
@@ -561,6 +562,14 @@ def niFgen_SetNamedWaveformNextWritePosition(self, vi, channel_name, waveform_na
561562
self.niFgen_SetNamedWaveformNextWritePosition_cfunc.restype = ViStatus # noqa: F405
562563
return self.niFgen_SetNamedWaveformNextWritePosition_cfunc(vi, channel_name, waveform_name, relative_to, offset)
563564

565+
def niFgen_SetRuntimeEnvironment(self, environment, environment_version, reserved1, reserved2): # noqa: N802
566+
with self._func_lock:
567+
if self.niFgen_SetRuntimeEnvironment_cfunc is None:
568+
self.niFgen_SetRuntimeEnvironment_cfunc = self._get_library_function('niFgen_SetRuntimeEnvironment')
569+
self.niFgen_SetRuntimeEnvironment_cfunc.argtypes = [ctypes.POINTER(ViChar), ctypes.POINTER(ViChar), ctypes.POINTER(ViChar), ctypes.POINTER(ViChar)] # noqa: F405
570+
self.niFgen_SetRuntimeEnvironment_cfunc.restype = ViStatus # noqa: F405
571+
return self.niFgen_SetRuntimeEnvironment_cfunc(environment, environment_version, reserved1, reserved2)
572+
564573
def niFgen_SetWaveformNextWritePosition(self, vi, channel_name, waveform_handle, relative_to, offset): # noqa: N802
565574
with self._func_lock:
566575
if self.niFgen_SetWaveformNextWritePosition_cfunc is None:

generated/nifgen/nifgen/_library_interpreter.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,17 @@
44
import array
55
import ctypes
66
import hightime # noqa: F401
7+
import platform
8+
79
import nifgen._library_singleton as _library_singleton
810
import nifgen._visatype as _visatype
911
import nifgen.enums as enums # noqa: F401
1012
import nifgen.errors as errors
1113

1214

15+
_was_runtime_environment_set = None
16+
17+
1318
# Helper functions for creating ctypes needed for calling into the driver DLL
1419
def _get_ctypes_pointer_for_buffer(value=None, library_type=None, size=None):
1520
if isinstance(value, array.array):
@@ -56,6 +61,21 @@ class LibraryInterpreter(object):
5661
def __init__(self, encoding):
5762
self._encoding = encoding
5863
self._library = _library_singleton.get()
64+
global _was_runtime_environment_set
65+
if _was_runtime_environment_set is None:
66+
try:
67+
runtime_env = platform.python_implementation()
68+
version = platform.python_version()
69+
self.set_runtime_environment(
70+
runtime_env,
71+
version,
72+
'',
73+
''
74+
)
75+
except errors.DriverTooOldError:
76+
pass
77+
finally:
78+
_was_runtime_environment_set = True
5979
# Initialize _vi to 0 for now.
6080
# Session will directly update it once the driver runtime init function has been called and
6181
# we have a valid session handle.
@@ -616,6 +636,15 @@ def set_named_waveform_next_write_position(self, channel_name, waveform_name, re
616636
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
617637
return
618638

639+
def set_runtime_environment(self, environment, environment_version, reserved1, reserved2): # noqa: N802
640+
environment_ctype = ctypes.create_string_buffer(environment.encode(self._encoding)) # case C020
641+
environment_version_ctype = ctypes.create_string_buffer(environment_version.encode(self._encoding)) # case C020
642+
reserved1_ctype = ctypes.create_string_buffer(reserved1.encode(self._encoding)) # case C020
643+
reserved2_ctype = ctypes.create_string_buffer(reserved2.encode(self._encoding)) # case C020
644+
error_code = self._library.niFgen_SetRuntimeEnvironment(environment_ctype, environment_version_ctype, reserved1_ctype, reserved2_ctype)
645+
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
646+
return
647+
619648
def set_waveform_next_write_position(self, channel_name, waveform_handle, relative_to, offset): # noqa: N802
620649
vi_ctype = _visatype.ViSession(self._vi) # case S110
621650
channel_name_ctype = ctypes.create_string_buffer(channel_name.encode(self._encoding)) # case C010

generated/nifgen/nifgen/unit_tests/_mock_helper.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,8 @@ def __init__(self):
182182
self._defaults['SetAttributeViString']['return'] = 0
183183
self._defaults['SetNamedWaveformNextWritePosition'] = {}
184184
self._defaults['SetNamedWaveformNextWritePosition']['return'] = 0
185+
self._defaults['SetRuntimeEnvironment'] = {}
186+
self._defaults['SetRuntimeEnvironment']['return'] = 0
185187
self._defaults['SetWaveformNextWritePosition'] = {}
186188
self._defaults['SetWaveformNextWritePosition']['return'] = 0
187189
self._defaults['UnlockSession'] = {}
@@ -772,6 +774,11 @@ def niFgen_SetNamedWaveformNextWritePosition(self, vi, channel_name, waveform_na
772774
return self._defaults['SetNamedWaveformNextWritePosition']['return']
773775
return self._defaults['SetNamedWaveformNextWritePosition']['return']
774776

777+
def niFgen_SetRuntimeEnvironment(self, environment, environment_version, reserved1, reserved2): # noqa: N802
778+
if self._defaults['SetRuntimeEnvironment']['return'] != 0:
779+
return self._defaults['SetRuntimeEnvironment']['return']
780+
return self._defaults['SetRuntimeEnvironment']['return']
781+
775782
def niFgen_SetWaveformNextWritePosition(self, vi, channel_name, waveform_handle, relative_to, offset): # noqa: N802
776783
if self._defaults['SetWaveformNextWritePosition']['return'] != 0:
777784
return self._defaults['SetWaveformNextWritePosition']['return']
@@ -978,6 +985,8 @@ def set_side_effects_and_return_values(self, mock_library):
978985
mock_library.niFgen_SetAttributeViString.return_value = 0
979986
mock_library.niFgen_SetNamedWaveformNextWritePosition.side_effect = MockFunctionCallError("niFgen_SetNamedWaveformNextWritePosition")
980987
mock_library.niFgen_SetNamedWaveformNextWritePosition.return_value = 0
988+
mock_library.niFgen_SetRuntimeEnvironment.side_effect = MockFunctionCallError("niFgen_SetRuntimeEnvironment")
989+
mock_library.niFgen_SetRuntimeEnvironment.return_value = 0
981990
mock_library.niFgen_SetWaveformNextWritePosition.side_effect = MockFunctionCallError("niFgen_SetWaveformNextWritePosition")
982991
mock_library.niFgen_SetWaveformNextWritePosition.return_value = 0
983992
mock_library.niFgen_UnlockSession.side_effect = MockFunctionCallError("niFgen_UnlockSession")

src/nifgen/metadata/attributes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -*- coding: utf-8 -*-
2-
# This file is generated from NI-FGEN API metadata version 23.5.0d28
2+
# This file is generated from NI-FGEN API metadata version 23.5.0d86
33
attributes = {
44
1050005: {
55
'access': 'read-write',

src/nifgen/metadata/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# -*- coding: utf-8 -*-
2-
# This file is generated from NI-FGEN API metadata version 23.5.0d28
2+
# This file is generated from NI-FGEN API metadata version 23.5.0d86
33
config = {
4-
'api_version': '23.5.0d28',
4+
'api_version': '23.5.0d86',
55
'c_function_prefix': 'niFgen_',
66
'close_function': 'close',
77
'context_manager_name': {

src/nifgen/metadata/enums.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -*- coding: utf-8 -*-
2-
# This file is generated from NI-FGEN API metadata version 23.5.0d28
2+
# This file is generated from NI-FGEN API metadata version 23.5.0d86
33
enums = {
44
'AnalogPath': {
55
'values': [

src/nifgen/metadata/functions.py

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -*- coding: utf-8 -*-
2-
# This file is generated from NI-FGEN API metadata version 23.5.0d28
2+
# This file is generated from NI-FGEN API metadata version 23.5.0d86
33
functions = {
44
'AbortGeneration': {
55
'documentation': {
@@ -2860,6 +2860,44 @@
28602860
'python_name': 'set_next_write_position',
28612861
'returns': 'ViStatus'
28622862
},
2863+
'SetRuntimeEnvironment': {
2864+
'codegen_method': 'private',
2865+
'documentation': {
2866+
'description': 'TBD'
2867+
},
2868+
'included_in_proto': False,
2869+
'method_templates': [
2870+
{
2871+
'documentation_filename': 'none',
2872+
'library_interpreter_filename': 'default_method',
2873+
'method_python_name_suffix': '',
2874+
'session_filename': 'none'
2875+
}
2876+
],
2877+
'parameters': [
2878+
{
2879+
'direction': 'in',
2880+
'name': 'environment',
2881+
'type': 'ViConstString'
2882+
},
2883+
{
2884+
'direction': 'in',
2885+
'name': 'environmentVersion',
2886+
'type': 'ViConstString'
2887+
},
2888+
{
2889+
'direction': 'in',
2890+
'name': 'reserved1',
2891+
'type': 'ViConstString'
2892+
},
2893+
{
2894+
'direction': 'in',
2895+
'name': 'reserved2',
2896+
'type': 'ViConstString'
2897+
}
2898+
],
2899+
'returns': 'ViStatus'
2900+
},
28632901
'SetWaveformNextWritePosition': {
28642902
'codegen_method': 'private',
28652903
'documentation': {

0 commit comments

Comments
 (0)