Source code for nidaqmx._task_modules.channel_collection

from collections.abc import Sequence

from nidaqmx._task_modules.channels.channel import Channel
from nidaqmx.errors import DaqError
from nidaqmx.error_codes import DAQmxErrors
from nidaqmx.utils import unflatten_channel_string, flatten_channel_string


[docs]class ChannelCollection(Sequence): """ Contains the collection of channels for a DAQmx Task. This class defines methods that implements a container object. """ def __init__(self, task_handle, interpreter): """ Do not construct this object directly; instead, construct a nidaqmx.Task and use the appropriate property, such as task.ai_channels. """ self._handle = task_handle self._interpreter = interpreter def __contains__(self, item): channel_names = self.channel_names if isinstance(item, str): items = unflatten_channel_string(item) elif isinstance(item, Channel): items = item.channel_names return all([item in channel_names for item in items]) def __eq__(self, other): if isinstance(other, self.__class__): return self._handle == other._handle return False def __getitem__(self, index): """ Indexes a subset of virtual channels on this channel collection. Args: index: The value of the index. The following index types are supported: - str: Name of the virtual channel. You also can specify a string that contains a list or range of names to this input. If you have a list of names, use the DAQmx Flatten Channel String function to convert the list to a string. - int: Index/position of the virtual channel in the collection. - slice: Range of the indexes/positions of virtual channels in the collection. Returns: nidaqmx._task_modules.channels.channel.Channel: Indicates a channel object representing the subset of virtual channels indexed. """ if isinstance(index, int): channel_names = self.channel_names[index] elif isinstance(index, slice): channel_names = flatten_channel_string(self.channel_names[index]) elif isinstance(index, str): channel_names = index else: raise DaqError( 'Invalid index type "{}" used to access channels.' .format(type(index)), DAQmxErrors.UNKNOWN) if channel_names: return Channel._factory(self._handle, channel_names, self._interpreter) else: raise DaqError( 'You cannot specify an empty index when indexing channels.\n' 'Index used: {}'.format(index), DAQmxErrors.UNKNOWN) def __hash__(self): return self._interpreter.hash_task_handle(self._handle) def __iter__(self): for channel_name in self.channel_names: yield Channel._factory(self._handle, channel_name, self._interpreter) def __len__(self): return len(self.channel_names) def __ne__(self, other): return not self.__eq__(other) def __reversed__(self): channel_names = self.channel_names channel_names.reverse() for channel_name in channel_names: yield Channel._factory(self._handle, channel_name, self._interpreter) @property def all(self): """ :class:`nidaqmx._task_modules.channels.channel.Channel`: Specifies a channel object that represents the entire list of virtual channels on this channel collection. """ # Passing a blank string means all channels. return Channel._factory(self._handle, '', self._interpreter) @property def channel_names(self): """ List[str]: Specifies the entire list of virtual channels on this channel collection. """ val = self._interpreter.get_task_attribute_string(self._handle, 0x1273) return unflatten_channel_string(val)