Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
441457d
Supported generation of nirfsg module and added its metadata
Vaishnavigupta1312 Apr 1, 2025
8c79a45
Supported ViAttr and ViRsrc
Vaishnavigupta1312 Apr 2, 2025
18af3dc
Added nirfsg to build_release.py
Vaishnavigupta1312 Apr 2, 2025
f9e8bb0
Final auditing for public APIs
Vaishnavigupta1312 Apr 4, 2025
5c4327b
Resolved syntax warnings and self_test definition
Vaishnavigupta1312 Apr 7, 2025
5e2456e
Added rfsg generation commands
Vaishnavigupta1312 Apr 7, 2025
c35ee8e
Enabled hightime functions for rfsg
Vaishnavigupta1312 Apr 7, 2025
3c37d71
Added basic system test for nirfsg
Vaishnavigupta1312 Apr 8, 2025
8864160
Modified CHANGELOG.md
Vaishnavigupta1312 Apr 8, 2025
57a7b4a
Added basic nirfsg example
Vaishnavigupta1312 Apr 8, 2025
b8e5b2d
Corrected resource name in example
Vaishnavigupta1312 Apr 8, 2025
c77a429
Removed system test for nirfsg
Vaishnavigupta1312 Apr 8, 2025
988a42e
Removed example
Vaishnavigupta1312 Apr 8, 2025
5f543a0
Added example
Vaishnavigupta1312 Apr 8, 2025
f0da800
Added system test for nirfsg
Vaishnavigupta1312 Apr 8, 2025
356d12f
generated examples.rst
Vaishnavigupta1312 Apr 8, 2025
9a94d2e
Updated tox.ini and tox-travis.ini with correct envlist
Vaishnavigupta1312 Apr 8, 2025
82d360c
Removed nirfsg from workflow files
Vaishnavigupta1312 Apr 8, 2025
0b20188
Addition of nirfsg to yaml files for running the system tests
Vaishnavigupta1312 Apr 8, 2025
3f90d2c
Added enums related to functions
Vaishnavigupta1312 Apr 10, 2025
017a78b
Related enums to functionas and renamed some enums
Vaishnavigupta1312 Apr 10, 2025
0371509
Fixed tox.ini and travis.ini
Vaishnavigupta1312 Apr 11, 2025
353a9ae
Updated the list to be alphabetical
Vaishnavigupta1312 Apr 11, 2025
8abaa83
Reverting the tooling changes
Vaishnavigupta1312 Apr 11, 2025
04a01be
Reverted helper.py changes
Vaishnavigupta1312 Apr 11, 2025
ab61a58
Removed system test for nirfsg
Vaishnavigupta1312 Apr 11, 2025
b8e0ff5
Restructured nirfsg example
Vaishnavigupta1312 Apr 11, 2025
217fad0
Modified nirfsg_usage.inc
Vaishnavigupta1312 Apr 11, 2025
71f92e3
Updated RFSG feed info
Vaishnavigupta1312 Apr 14, 2025
7de65af
Updated rfsg module version
Vaishnavigupta1312 Apr 15, 2025
bc2af92
generated README.rst with updated vesion
Vaishnavigupta1312 Apr 15, 2025
a201769
Updated enum description and disabled session lock calls for rfsg
Vaishnavigupta1312 Apr 15, 2025
964ab9e
Updated README.rst
Vaishnavigupta1312 Apr 15, 2025
64a5a10
removing input() for non-interactive use of example
Vaishnavigupta1312 Apr 15, 2025
6e178b2
Removed print statement from example
Vaishnavigupta1312 Apr 15, 2025
32809b7
Added documentation for functions
Vaishnavigupta1312 Apr 15, 2025
9a25599
Added documentation for functions
Vaishnavigupta1312 Apr 15, 2025
d44b870
Removing nirfsg out of action workflows
Vaishnavigupta1312 Apr 16, 2025
57accc1
Updated CHANGELOG.md and modified documentation
Vaishnavigupta1312 Apr 17, 2025
442d3f3
Resolved review comments
Vaishnavigupta1312 Apr 22, 2025
3677577
Merge remote-tracking branch 'upstream/master' into users/vagupta/add…
Vaishnavigupta1312 Apr 23, 2025
d8cd904
Modified CHANGELOG.md
Vaishnavigupta1312 Apr 23, 2025
5d268ed
Modified CHANGELOG.md
Vaishnavigupta1312 Apr 23, 2025
88d867e
Merge branch 'master' into users/vagupta/custom_expansion_for_repeate…
Vaishnavigupta1312 Apr 24, 2025
7d116c9
Template changes for rep caps
Vaishnavigupta1312 Apr 25, 2025
d4f80d3
Merge remote-tracking branch 'upstream/master' into users/vagupta/cus…
Vaishnavigupta1312 Apr 28, 2025
1e05db7
Added custom expansion support for repeated capabilities
Vaishnavigupta1312 Apr 30, 2025
a844cc9
updated niFake metadata files and session mako template
Vaishnavigupta1312 May 12, 2025
5c76cb1
Updated the helper scripts and mako templates
Vaishnavigupta1312 May 12, 2025
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 CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
- [nifgen (NI-FGEN)](#nifgen-ni-fgen)
- [nimodinst (NI-ModInst)](#nimodinst-ni-modinst)
- [nirfsg (NI-RFSG)](#nirfsg-ni-rfsg)
- [nirfsg (NI-RFSG)](#nirfsg-ni-rfsg)
- [niscope (NI-SCOPE)](#niscope-ni-scope)
- [nise (NI Switch Executive)](#nise-ni-switch-executive)
- [niswitch (NI-SWITCH)](#niswitch-ni-switch)
Expand Down
1 change: 1 addition & 0 deletions build/helper/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
from build.helper.metadata_filters import filter_library_functions # noqa: F401
from build.helper.metadata_filters import filter_parameters # noqa: F401
from build.helper.metadata_filters import filter_public_functions # noqa: F401
from build.helper.metadata_filters import filter_rep_cap_supported_attributes

from build.helper.metadata_find import find_custom_type # noqa: F401
from build.helper.metadata_find import find_session_handle_parameter # noqa: F401
Expand Down
4 changes: 4 additions & 0 deletions build/helper/metadata_add_all.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from .helper import get_python_type_for_api_type
from .metadata_filters import filter_codegen_attributes
from .metadata_filters import filter_codegen_functions
from .metadata_filters import filter_rep_cap_supported_attributes
from .metadata_find import find_custom_type
from .metadata_find import find_size_parameter
from .metadata_merge_dicts import merge_helper
Expand Down Expand Up @@ -721,6 +722,9 @@ def add_all_config_metadata(config):
if 'uses_nitclk' not in config:
config['uses_nitclk'] = False

if 'repeated_capability_object_type' not in config:
config['repeated_capability_object_type'] = {'python': 'session'}

return config


Expand Down
10 changes: 10 additions & 0 deletions build/helper/metadata_filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -450,4 +450,14 @@ def filter_codegen_enums(enums):
'''Returns enum metadata only for those enums to be included in codegen'''
return {k: v for k, v in enums.items() if v['codegen_method'] != 'no'}

def filter_rep_cap_supported_attributes(attributes, rep_cap_name):
'''Returns attribute metadata only for those attributes that support the specified repeated capability.

Args:
attributes: Dictionary of attribute metadata.
rep_cap_name: The name of the repeated capability to filter by.

Returns:
Dictionary of attributes that support the specified repeated capability.
'''
return {k: v for k, v in attributes.items() if rep_cap_name in v.get('supported_rep_caps', [])}
94 changes: 91 additions & 3 deletions build/templates/session.py.mako
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,87 @@ class _Lock(object):
def __exit__(self, exc_type, exc_value, traceback):
self._session.unlock()


% endif
% if len(config['repeated_capabilities']) > 0:

% if config['repeated_capability_object_type']['python'] == 'custom':
# Dynamically handle repeated capabilities
% for rep_cap in config['repeated_capabilities']:

class _RepeatedCapability${rep_cap['python_name'].capitalize()}(object):
% for attribute in helper.sorted_attrs(helper.filter_rep_cap_supported_attributes(attributes, rep_cap['python_name'])):
<%
helper.add_attribute_rep_cap_tip(attributes[attribute], config)
%>\
% if attributes[attribute]['enum']:
% if helper.enum_uses_converter(enums[attributes[attribute]['enum']]):
${attributes[attribute]['python_name']} = _attributes.AttributeEnumWithConverter(_attributes.AttributeEnum(_attributes.Attribute${attributes[attribute]['type']}, enums.${enums[attributes[attribute]['enum']]['python_name']}, ${attribute}), _converters.${enums[attributes[attribute]['enum']]['enum_to_converted_value_function_name']}, _converters.${enums[attributes[attribute]['enum']]['converted_value_to_enum_function_name']})
% else:
${attributes[attribute]['python_name']} = _attributes.AttributeEnum(_attributes.Attribute${attributes[attribute]['type']}, enums.${enums[attributes[attribute]['enum']]['python_name']}, ${attribute})
% endif
% else:
${attributes[attribute]['python_name']} = _attributes.${attributes[attribute]['attribute_class']}(${attribute})
% endif
% if 'documentation' in attributes[attribute] and len(helper.get_documentation_for_node_docstring(attributes[attribute], config, indent=4).strip()) > 0:
'''Type: ${attributes[attribute]['type_in_documentation']}

${helper.get_documentation_for_node_docstring(attributes[attribute], config, indent=4)}
'''
% endif
% endfor
def __init__(self, session, repeated_capability_list):
object.__setattr__(self, '_session', session)
object.__setattr__(self, '_repeated_capability_list', repeated_capability_list)
object.__setattr__(self, '_prefix', '${rep_cap["prefix"]}')
object.__setattr__(self, '_current_repeated_capability_list', repeated_capability_list if len(repeated_capability_list) > 0 else [''])
object.__setattr__(self, '_separator', '')

def __setattr__(self, key, value):
if key not in dir(self):
raise AttributeError("'{0}' object has no attribute '{1}'".format(type(self).__name__, key))
object.__setattr__(self, key, value)

def __getitem__(self, repeated_capability):
'''Set/get properties or call methods with a repeated capability (i.e. channels)'''
rep_caps_list = _converters.convert_repeated_capabilities(repeated_capability, self._prefix)
complete_rep_cap_list = [
current_rep_cap + self._separator + rep_cap
for current_rep_cap in self._current_repeated_capability_list
for rep_cap in rep_caps_list
]
object.__setattr__(self, '_current_repeated_capability_list', complete_rep_cap_list)
self._current_repeated_capability_list = complete_rep_cap_list

return self

def _get_attribute_vi_real64(self, attribute):
repeated_capability = ','.join(self._current_repeated_capability_list)
value = self._session._interpreter.get_attribute_vi_real64(repeated_capability, attribute)
return value

def _set_attribute_vi_real64(self, attribute, value):
repeated_capability = ','.join(self._current_repeated_capability_list)
self._session._interpreter.set_attribute_vi_real64(repeated_capability, attribute, value)

def _get_attribute_vi_int32(self, attribute):
repeated_capability = ','.join(self._current_repeated_capability_list)
value = self._session._interpreter.get_attribute_vi_int32(repeated_capability, attribute)
return value

def _set_attribute_vi_int32(self, attribute, value):
repeated_capability = ','.join(self._current_repeated_capability_list)
self._session._interpreter.set_attribute_vi_int32(repeated_capability, attribute, value)

def _get_attribute_vi_string(self, attribute):
repeated_capability = ','.join(self._current_repeated_capability_list)
value = self._session._interpreter.get_attribute_vi_string(repeated_capability, attribute)
return value

def _set_attribute_vi_string(self, attribute, value):
repeated_capability = ','.join(self._current_repeated_capability_list)
self._session._interpreter.set_attribute_vi_string(repeated_capability, attribute, value)
% endfor
% else:
class _RepeatedCapabilities(object):
def __init__(self, session, prefix, current_repeated_capability_list):
self._session = session
Expand Down Expand Up @@ -126,6 +204,7 @@ class _NoChannel(object):

def __exit__(self, exc_type, exc_value, traceback):
self._session._repeated_capability = self._repeated_capability_cache
% endif


% endif
Expand All @@ -137,6 +216,11 @@ class _SessionBase(object):

% for attribute in helper.sorted_attrs(helper.filter_codegen_attributes(attributes)):
<%
# Skip attributes with repeated capability expansion set to "custom"
if 'repeated_capability_type' in attributes[attribute]:
rep_cap_type = attributes[attribute]['repeated_capability_type']
if any(rep_cap.get('python_name') == rep_cap_type and config['repeated_capability_object_type'] == 'custom' for rep_cap in config['repeated_capabilities']):
continue
helper.add_attribute_rep_cap_tip(attributes[attribute], config)
%>\
%if attributes[attribute]['enum']:
Expand Down Expand Up @@ -178,9 +262,13 @@ constructor_params = helper.filter_parameters(init_function['parameters'], helpe

% if len(config['repeated_capabilities']) > 0:
# Instantiate any repeated capability objects
% for rep_cap in config['repeated_capabilities']:
% for rep_cap in config['repeated_capabilities']:
% if config['repeated_capability_object_type']['python'] == 'custom':
self.${rep_cap['python_name']} = _RepeatedCapability${rep_cap['python_name'].capitalize()}(self, repeated_capability_list)
% else:
self.${rep_cap['python_name']} = _RepeatedCapabilities(self, '${rep_cap["prefix"]}', repeated_capability_list)
% endfor
% endif
% endfor

% endif
# Finally, set _is_frozen to True which is used to prevent clients from accidentally adding
Expand Down
1 change: 0 additions & 1 deletion generated/nidmm/nidmm/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ def __enter__(self):
def __exit__(self, exc_type, exc_value, traceback):
self._session.unlock()


class _SessionBase(object):
'''Base class for all NI-DMM sessions.'''

Expand Down
Loading