Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 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
1 change: 1 addition & 0 deletions build/templates/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
13 changes: 10 additions & 3 deletions build/templates/enums.py.mako
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,23 @@ config = template_parameters['metadata'].config
enums = config['enums']
%>
from enum import Enum
% if any(enums[e].get('enum_class', 'Enum') == 'IntFlag' for e in enums):
from enum import IntFlag
% endif
% for enum_name in sorted(helper.filter_codegen_enums(enums)):


class ${enums[enum_name]['python_name']}(Enum):
class ${enums[enum_name]['python_name']}(${enums[enum_name].get('enum_class', 'Enum')}):
<%
print_list = []
%>\
% for enum_value in enums[enum_name]['values']:
% if type(enum_value['value']) is str:
% for i, enum_value in enumerate(enums[enum_name]['values']):
% if enums[enum_name].get('enum_class', 'Enum') == 'IntFlag' and enum_value['value'] == 0:
${enum_value['python_name']} = 0
% elif type(enum_value['value']) is str:
${enum_value['python_name']} = '${enum_value['value']}'
% elif enums[enum_name].get('enum_class', 'Enum') == 'IntFlag' and isinstance(enum_value['value'], int):
${enum_value['python_name']} = ${enum_value['value']}
% else:
${enum_value['python_name']} = ${enum_value['value']}
% endif
Expand Down
1 change: 1 addition & 0 deletions generated/nidcpower/nidcpower/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
1 change: 1 addition & 0 deletions generated/nidigital/nidigital/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
1 change: 1 addition & 0 deletions generated/nidmm/nidmm/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
6 changes: 6 additions & 0 deletions generated/nifake/nifake/_grpc_stub_interpreter.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,12 @@ def fetch_waveform(self, number_of_samples): # noqa: N802
def fetch_waveform_into(self, number_of_samples): # noqa: N802
raise NotImplementedError('numpy-specific methods are not supported over gRPC')

def function_with_int_flag_parameter(self, flag): # noqa: N802
self._invoke(
self._client.FunctionWithIntFlagParameter,
grpc_types.FunctionWithIntFlagParameterRequest(vi=self._vi, flag=flag.value),
)

def function_with_repeated_capability_type(self, site_list): # noqa: N802
raise NotImplementedError('function_with_repeated_capability_type is not supported over gRPC')

Expand Down
9 changes: 9 additions & 0 deletions generated/nifake/nifake/_library.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ def __init__(self, ctypes_library):
self.niFake_EnumInputFunctionWithDefaults_cfunc = None
self.niFake_ExportAttributeConfigurationBuffer_cfunc = None
self.niFake_FetchWaveform_cfunc = None
self.niFake_FunctionWithIntFlagParameter_cfunc = None
self.niFake_FunctionWithRepeatedCapabilityType_cfunc = None
self.niFake_GetABoolean_cfunc = None
self.niFake_GetANumber_cfunc = None
Expand Down Expand Up @@ -187,6 +188,14 @@ def niFake_FetchWaveform(self, vi, number_of_samples, waveform_data, actual_numb
self.niFake_FetchWaveform_cfunc.restype = ViStatus # noqa: F405
return self.niFake_FetchWaveform_cfunc(vi, number_of_samples, waveform_data, actual_number_of_samples)

def niFake_FunctionWithIntFlagParameter(self, vi, flag): # noqa: N802
with self._func_lock:
if self.niFake_FunctionWithIntFlagParameter_cfunc is None:
self.niFake_FunctionWithIntFlagParameter_cfunc = self._get_library_function('niFake_FunctionWithIntFlagParameter')
self.niFake_FunctionWithIntFlagParameter_cfunc.argtypes = [ViSession, ViUInt64] # noqa: F405
self.niFake_FunctionWithIntFlagParameter_cfunc.restype = ViStatus # noqa: F405
return self.niFake_FunctionWithIntFlagParameter_cfunc(vi, flag)

def niFake_FunctionWithRepeatedCapabilityType(self, vi, site_list): # noqa: N802
with self._func_lock:
if self.niFake_FunctionWithRepeatedCapabilityType_cfunc is None:
Expand Down
7 changes: 7 additions & 0 deletions generated/nifake/nifake/_library_interpreter.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,13 @@ def fetch_waveform_into(self, waveform_data): # noqa: N802
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return

def function_with_int_flag_parameter(self, flag): # noqa: N802
vi_ctype = _visatype.ViSession(self._vi) # case S110
flag_ctype = _visatype.ViUInt64(flag.value) # case S130
error_code = self._library.niFake_FunctionWithIntFlagParameter(vi_ctype, flag_ctype)
errors.handle_error(self, error_code, ignore_warnings=False, is_error_handling=False)
return

def function_with_repeated_capability_type(self, site_list): # noqa: N802
vi_ctype = _visatype.ViSession(self._vi) # case S110
site_list_ctype = ctypes.create_string_buffer(site_list.encode(self._encoding)) # case C010
Expand Down
1 change: 1 addition & 0 deletions generated/nifake/nifake/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
16 changes: 16 additions & 0 deletions generated/nifake/nifake/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# This file was generated

from enum import Enum
from enum import IntFlag


class Color(Enum):
Expand Down Expand Up @@ -53,6 +54,21 @@ class FloatEnum(Enum):
'''


class IntFlagEnum(IntFlag):
A = 1
r'''
Flag A option.
'''
B = 2
r'''
Flag B option.
'''
C = 4
r'''
Flag C option.
'''


class MobileOSNames(Enum):
ANDROID = 'Android'
r'''
Expand Down
14 changes: 14 additions & 0 deletions generated/nifake/nifake/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -945,6 +945,20 @@ def fetch_waveform_into(self, waveform_data):
raise TypeError('waveform_data must be numpy.ndarray of dtype=float64, is ' + str(waveform_data.dtype))
self._interpreter.fetch_waveform_into(waveform_data)

@ivi_synchronized
def function_with_int_flag_parameter(self, flag):
r'''function_with_int_flag_parameter

Calls a method that takes a flag parameter which can be OR'd from multiple enum values.

Args:
flag (enums.IntFlagEnum): A flag parameter that can be a combination (bitwise OR) of IntFlagEnum values.

'''
if type(flag) is not enums.IntFlagEnum:
raise TypeError('Parameter flag must be of type ' + str(enums.IntFlagEnum))
self._interpreter.function_with_int_flag_parameter(flag)

@ivi_synchronized
def get_a_boolean(self):
r'''get_a_boolean
Expand Down
9 changes: 9 additions & 0 deletions generated/nifake/nifake/unit_tests/_mock_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ def __init__(self):
self._defaults['FetchWaveform']['return'] = 0
self._defaults['FetchWaveform']['waveformData'] = None
self._defaults['FetchWaveform']['actualNumberOfSamples'] = None
self._defaults['FunctionWithIntFlagParameter'] = {}
self._defaults['FunctionWithIntFlagParameter']['return'] = 0
self._defaults['FunctionWithRepeatedCapabilityType'] = {}
self._defaults['FunctionWithRepeatedCapabilityType']['return'] = 0
self._defaults['GetABoolean'] = {}
Expand Down Expand Up @@ -337,6 +339,11 @@ def niFake_FetchWaveform(self, vi, number_of_samples, waveform_data, actual_numb
actual_number_of_samples.contents.value = self._defaults['FetchWaveform']['actualNumberOfSamples']
return self._defaults['FetchWaveform']['return']

def niFake_FunctionWithIntFlagParameter(self, vi, flag): # noqa: N802
if self._defaults['FunctionWithIntFlagParameter']['return'] != 0:
return self._defaults['FunctionWithIntFlagParameter']['return']
return self._defaults['FunctionWithIntFlagParameter']['return']

def niFake_FunctionWithRepeatedCapabilityType(self, vi, site_list): # noqa: N802
if self._defaults['FunctionWithRepeatedCapabilityType']['return'] != 0:
return self._defaults['FunctionWithRepeatedCapabilityType']['return']
Expand Down Expand Up @@ -1036,6 +1043,8 @@ def set_side_effects_and_return_values(self, mock_library):
mock_library.niFake_ExportAttributeConfigurationBuffer.return_value = 0
mock_library.niFake_FetchWaveform.side_effect = MockFunctionCallError("niFake_FetchWaveform")
mock_library.niFake_FetchWaveform.return_value = 0
mock_library.niFake_FunctionWithIntFlagParameter.side_effect = MockFunctionCallError("niFake_FunctionWithIntFlagParameter")
mock_library.niFake_FunctionWithIntFlagParameter.return_value = 0
mock_library.niFake_FunctionWithRepeatedCapabilityType.side_effect = MockFunctionCallError("niFake_FunctionWithRepeatedCapabilityType")
mock_library.niFake_FunctionWithRepeatedCapabilityType.return_value = 0
mock_library.niFake_GetABoolean.side_effect = MockFunctionCallError("niFake_GetABoolean")
Expand Down
22 changes: 19 additions & 3 deletions generated/nifake/nifake/unit_tests/test_session.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import nifake
import nifake.errors
import numpy
import pytest

from unittest.mock import MagicMock
from unittest.mock import patch
Expand Down Expand Up @@ -837,10 +838,27 @@ def test_return_timedeltas(self):
assert returned_timedeltas == expected_timedeltas
self.patched_library_interpreter.return_list_of_durations_in_seconds.assert_called_once_with(len(time_values))

def test_function_with_int_flag_parameter_with_specific_flag(self):
flags = nifake.IntFlagEnum.C
self.patched_library_interpreter.function_with_int_flag_parameter.side_effect = None
self.patched_library_interpreter.function_with_int_flag_parameter.return_value = None
with nifake.Session('dev1') as session:
session.function_with_int_flag_parameter(flags)
self.patched_library_interpreter.function_with_int_flag_parameter.assert_called_once_with(flags)
called_arg = self.patched_library_interpreter.function_with_int_flag_parameter.call_args[0][0]
assert called_arg == 1 or called_arg.value == 4

def test_function_with_int_flag_parameter_invalid_type(self):
invalid_flag = "not_an_intflag"
with nifake.Session('dev1') as session:
with pytest.raises(TypeError) as exc_info:
session.function_with_int_flag_parameter(invalid_flag)
assert "Parameter flag must be of type" in str(exc_info.value)
assert "IntFlagEnum" in str(exc_info.value)

def test_session_write_waveform_numpy_complex64_invalid_dtype(self):
invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex128)
expected_error_message = "waveform_data_array must be numpy.ndarray of dtype=complex64, is complex128"
import pytest
with nifake.Session('dev1') as session:
with pytest.raises(TypeError) as exc_info:
session.write_waveform_numpy_complex64(invalid_waveform_data)
Expand All @@ -849,7 +867,6 @@ def test_session_write_waveform_numpy_complex64_invalid_dtype(self):
def test_session_write_waveform_numpy_complex128_invalid_dtype(self):
invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex64)
expected_error_message = "waveform_data_array must be numpy.ndarray of dtype=complex128, is complex64"
import pytest
with nifake.Session('dev1') as session:
with pytest.raises(TypeError) as exc_info:
session.write_waveform_numpy_complex128(invalid_waveform_data)
Expand All @@ -858,7 +875,6 @@ def test_session_write_waveform_numpy_complex128_invalid_dtype(self):
def test_session_write_waveform_numpy_complex_interleaved_i16_invalid_dtype(self):
invalid_waveform_data = numpy.full(10, 1.0 + 1.0j, dtype=numpy.complex64)
expected_error_message = "waveform_data_array must be numpy.ndarray of dtype=int16, is complex64"
import pytest
with nifake.Session('dev1') as session:
with pytest.raises(TypeError) as exc_info:
session.write_waveform_numpy_complex_interleaved_i16(invalid_waveform_data)
Expand Down
1 change: 1 addition & 0 deletions generated/nifgen/nifgen/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
1 change: 1 addition & 0 deletions generated/nimodinst/nimodinst/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
1 change: 1 addition & 0 deletions generated/nirfsg/nirfsg/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
1 change: 1 addition & 0 deletions generated/niscope/niscope/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
1 change: 1 addition & 0 deletions generated/nise/nise/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
1 change: 1 addition & 0 deletions generated/niswitch/niswitch/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
1 change: 1 addition & 0 deletions generated/nitclk/nitclk/_visatype.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ViInt32 = ctypes.c_int32
ViUInt32 = ctypes.c_uint32
ViInt64 = ctypes.c_int64
ViUInt64 = ctypes.c_uint64
ViString = ctypes.c_char_p
ViReal32 = ctypes.c_float
ViReal64 = ctypes.c_double
Expand Down
27 changes: 27 additions & 0 deletions src/nifake/metadata/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,33 @@
}
]
},
'IntFlagEnum': {
'codegen_method': 'public',
'enum_class': 'IntFlag',
'values': [
{
'documentation': {
'description': 'Flag A option.'
},
'name': 'NIFAKE_VAL_FLAG_A',
'value': 1
},
{
'documentation': {
'description': 'Flag B option.'
},
'name': 'NIFAKE_VAL_FLAG_B',
'value': 2
},
{
'documentation': {
'description': 'Flag C option.'
},
'name': 'NIFAKE_VAL_FLAG_C',
'value': 4
}
]
},
'MobileOSNames': {
'values': [
{
Expand Down
28 changes: 28 additions & 0 deletions src/nifake/metadata/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,34 @@
],
'returns': 'ViStatus'
},
'FunctionWithIntFlagParameter': {
'codegen_method': 'public',
'documentation': {
'description': "Calls a function that takes a flag parameter which can be OR'd from multiple enum values."
},
'included_in_proto': True,
'parameters': [
{
'direction': 'in',
'documentation': {
'description': 'Identifies a particular instrument session.'
},
'name': 'vi',
'type': 'ViSession'
},
{
'direction': 'in',
'documentation': {
'description': 'A flag parameter that can be a combination (bitwise OR) of IntFlagEnum values.'
},
'enum': 'IntFlagEnum',
'grpc_enum': None,
'name': 'flag',
'type': 'ViUInt64'
}
],
'returns': 'ViStatus'
},
'FunctionWithRepeatedCapabilityType': {
'documentation': {
'description': 'A function with a parameter that specifies repeated_capability_type.'
Expand Down
Loading