Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_record(self):
record = self.od['Identity object']
self.assertIsInstance(record, canopen.objectdictionary.Record)
self.assertEqual(len(record), 5)
self.assertEqual(record.index, 0x1018)
self.assertEqual(record.name, 'Identity object')
var = record['Vendor-ID']
self.assertIsInstance(var, canopen.objectdictionary.Variable)
self.assertEqual(var.name, 'Vendor-ID')
self.assertEqual(var.index, 0x1018)
self.assertEqual(var.subindex, 1)
self.assertEqual(var.data_type, canopen.objectdictionary.UNSIGNED32)
self.assertEqual(var.access_type, 'ro')
def test_add_record(self):
test_od = od.ObjectDictionary()
record = od.Record("Test Record", 0x1001)
var = od.Variable("Test Subindex", 0x1001, 1)
record.add_member(var)
test_od.add_object(record)
self.assertEqual(test_od["Test Record"], record)
self.assertEqual(test_od[0x1001], record)
self.assertEqual(test_od["Test Record"]["Test Subindex"], var)
if object_type in (VAR, DOMAIN):
var = build_variable(eds, section, node_id, index)
od.add_object(var)
elif object_type == ARR and eds.has_option(section, "CompactSubObj"):
arr = objectdictionary.Array(name, index)
last_subindex = objectdictionary.Variable(
"Number of entries", index, 0)
last_subindex.data_type = objectdictionary.UNSIGNED8
arr.add_member(last_subindex)
arr.add_member(build_variable(eds, section, node_id, index, 1))
od.add_object(arr)
elif object_type == ARR:
arr = objectdictionary.Array(name, index)
od.add_object(arr)
elif object_type == RECORD:
record = objectdictionary.Record(name, index)
od.add_object(record)
continue
# Match subindexes
match = re.match(r"^([0-9A-Fa-f]{4})[S|s]ub([0-9A-Fa-f]+)$", section)
if match is not None:
index = int(match.group(1), 16)
subindex = int(match.group(2), 16)
entry = od[index]
if isinstance(entry, (objectdictionary.Record,
objectdictionary.Array)):
var = build_variable(eds, section, node_id, index, subindex)
entry.add_member(var)
# Match [index]Name
def load_configuration(self):
''' Load the configuration of the node from the object dictionary.'''
for obj in self.object_dictionary.values():
if isinstance(obj, Record) or isinstance(obj, Array):
for subobj in obj.values():
if isinstance(subobj, Variable) and subobj.writable and (subobj.value is not None):
self.__load_configuration_helper(subobj.index, subobj.subindex, subobj.name, subobj.value)
elif isinstance(obj, Variable) and obj.writable and (obj.value is not None):
self.__load_configuration_helper(obj.index, None, obj.name, obj.value)
self.pdo.read() # reads the new configuration from the driver
def __init__(self, od):
self.od = od
#: Description of this variable from Object Dictionary, overridable
self.name = od.name
if isinstance(od.parent, (objectdictionary.Record,
objectdictionary.Array)):
# Include the parent object's name for subentries
self.name = od.parent.name + "." + od.name
#: Holds a local, overridable copy of the Object Index
self.index = od.index
#: Holds a local, overridable copy of the Object Subindex
self.subindex = od.subindex
# Use top level index name instead
var.name = name
od.add_object(var)
elif len(parameters) == 2 and parameters[1].get("ObjectType") == "ARRAY":
# Array
arr = objectdictionary.Array(name, index)
for par_tree in parameters:
var = build_variable(par_tree)
arr.add_member(var)
description = group_tree.find("Description")
if description is not None:
arr.description = description.text
od.add_object(arr)
else:
# Complex record
record = objectdictionary.Record(name, index)
for par_tree in parameters:
var = build_variable(par_tree)
record.add_member(var)
description = group_tree.find("Description")
if description is not None:
record.description = description.text
od.add_object(record)
return od
def __getitem__(self, index):
entry = self.od[index]
if isinstance(entry, objectdictionary.Variable):
return Variable(self, entry)
elif isinstance(entry, objectdictionary.Array):
return Array(self, entry)
elif isinstance(entry, objectdictionary.Record):
return Record(self, entry)
elif object_type == ARR:
arr = objectdictionary.Array(name, index)
od.add_object(arr)
elif object_type == RECORD:
record = objectdictionary.Record(name, index)
od.add_object(record)
continue
# Match subindexes
match = re.match(r"^([0-9A-Fa-f]{4})[S|s]ub([0-9A-Fa-f]+)$", section)
if match is not None:
index = int(match.group(1), 16)
subindex = int(match.group(2), 16)
entry = od[index]
if isinstance(entry, (objectdictionary.Record,
objectdictionary.Array)):
var = build_variable(eds, section, node_id, index, subindex)
entry.add_member(var)
# Match [index]Name
match = re.match(r"^([0-9A-Fa-f]{4})Name", section)
if match is not None:
index = int(match.group(1), 16)
num_of_entries = int(eds.get(section, "NrOfEntries"))
entry = od[index]
# For CompactSubObj index 1 is were we find the variable
src_var = od[index][1]
for subindex in range(1, num_of_entries + 1):
var = copy_variable(eds, section, subindex, src_var)
if var is not None:
entry.add_member(var)