Commit 4268d685 authored by oroulet's avatar oroulet Committed by oroulet

rename get->read and set->write many places to better follow ua spec

parent 1d3dee64
......@@ -613,7 +613,7 @@ class Client:
Read the value of multiple nodes in one ua call.
"""
nodeids = [node.nodeid for node in nodes]
results = await self.uaclient.get_attributes(nodeids, ua.AttributeIds.Value)
results = await self.uaclient.read_attributes(nodeids, ua.AttributeIds.Value)
return [result.Value.Value for result in results]
async def write_values(self, nodes, values):
......@@ -622,7 +622,7 @@ class Client:
"""
nodeids = [node.nodeid for node in nodes]
dvs = [value_to_datavalue(val) for val in values]
results = await self.uaclient.set_attributes(nodeids, dvs, ua.AttributeIds.Value)
results = await self.uaclient.write_attributes(nodeids, dvs, ua.AttributeIds.Value)
for result in results:
result.check()
......
......@@ -651,8 +651,8 @@ class UaClient:
response.ResponseHeader.ServiceResult.check()
# nothing to return for this service
async def get_attributes(self, nodeids, attr):
self.logger.info("get_attributes of several nodes")
async def read_attributes(self, nodeids, attr):
self.logger.info("read_attributes of several nodes")
request = ua.ReadRequest()
for nodeid in nodeids:
rv = ua.ReadValueId()
......@@ -664,12 +664,12 @@ class UaClient:
response.ResponseHeader.ServiceResult.check()
return response.Results
async def set_attributes(self, nodeids, datavalues, attributeid=ua.AttributeIds.Value):
async def write_attributes(self, nodeids, datavalues, attributeid=ua.AttributeIds.Value):
"""
Set an attribute of multiple nodes
datavalue is a ua.DataValue object
"""
self.logger.info("set_attributes of several nodes")
self.logger.info("write_attributes of several nodes")
request = ua.WriteRequest()
for idx, nodeid in enumerate(nodeids):
attr = ua.WriteValue()
......
......@@ -41,7 +41,7 @@ async def _copy_node(server, parent_nodeid, rdesc, nodeid, recursive):
async def _rdesc_from_node(parent, node):
results = await node.get_attributes([
results = await node.read_attributes([
ua.AttributeIds.NodeClass, ua.AttributeIds.BrowseName, ua.AttributeIds.DisplayName,
])
nclass, qname, dname = [res.Value.Value for res in results]
......@@ -65,7 +65,7 @@ async def _read_and_copy_attrs(node_type, struct, addnode):
"BodyLength", "TypeId", "SpecifiedAttributes", "Encoding", "IsAbstract", "EventNotifier",
)]
attrs = [getattr(ua.AttributeIds, name) for name in names]
results = await node_type.get_attributes(attrs)
results = await node_type.read_attributes(attrs)
for idx, name in enumerate(names):
if results[idx].StatusCode.is_good():
if name == "Value":
......
......@@ -126,7 +126,7 @@ async def select_clauses_from_evtype(evtypes):
selected_paths = []
for evtype in evtypes:
for prop in await get_event_properties_from_type_node(evtype):
browse_name = await prop.get_browse_name()
browse_name = await prop.read_browse_name()
if browse_name not in selected_paths:
op = ua.SimpleAttributeOperand()
op.AttributeId = ua.AttributeIds.Value
......@@ -199,8 +199,8 @@ async def get_event_obj_from_type_node(node):
curr_node = node
while curr_node.nodeid.Identifier != parent_identifier:
for prop in await curr_node.get_properties():
name = (await prop.get_browse_name()).Name
val = await prop.get_data_value()
name = (await prop.read_browse_name()).Name
val = await prop.write_data_value()
self.add_property(name, val.Value.Value, val.Value.VariantType)
parents = await curr_node.get_referenced_nodes(refs=ua.ObjectIds.HasSubtype, direction=ua.BrowseDirection.Inverse, includesubtypes=True)
......
......@@ -77,56 +77,56 @@ class Node:
def __hash__(self):
return self.nodeid.__hash__()
async def get_browse_name(self):
async def read_browse_name(self):
"""
Get browse name of a node. A browse name is a QualifiedName object
composed of a string(name) and a namespace index.
"""
result = await self.get_attribute(ua.AttributeIds.BrowseName)
result = await self.read_attribute(ua.AttributeIds.BrowseName)
return result.Value.Value
async def get_display_name(self):
async def read_display_name(self):
"""
get description attribute of node
"""
result = await self.get_attribute(ua.AttributeIds.DisplayName)
result = await self.read_attribute(ua.AttributeIds.DisplayName)
return result.Value.Value
async def get_data_type(self):
async def read_data_type(self):
"""
get data type of node as NodeId
"""
result = await self.get_attribute(ua.AttributeIds.DataType)
result = await self.read_attribute(ua.AttributeIds.DataType)
return result.Value.Value
async def get_data_type_as_variant_type(self):
async def read_data_type_as_variant_type(self):
"""
get data type of node as VariantType
This only works if node is a variable, otherwise type
may not be convertible to VariantType
"""
result = await self.get_attribute(ua.AttributeIds.DataType)
result = await self.read_attribute(ua.AttributeIds.DataType)
return await data_type_to_variant_type(Node(self.server, result.Value.Value))
async def get_access_level(self):
"""
Get the access level attribute of the node as a set of AccessLevel enum values.
"""
result = await self.get_attribute(ua.AttributeIds.AccessLevel)
result = await self.read_attribute(ua.AttributeIds.AccessLevel)
return ua.AccessLevel.parse_bitfield(result.Value.Value)
async def get_user_access_level(self):
"""
Get the user access level attribute of the node as a set of AccessLevel enum values.
"""
result = await self.get_attribute(ua.AttributeIds.UserAccessLevel)
result = await self.read_attribute(ua.AttributeIds.UserAccessLevel)
return ua.AccessLevel.parse_bitfield(result.Value.Value)
async def get_event_notifier(self):
async def read_event_notifier(self):
"""
Get the event notifier attribute of the node as a set of EventNotifier enum values.
"""
result = await self.get_attribute(ua.AttributeIds.EventNotifier)
result = await self.read_attribute(ua.AttributeIds.EventNotifier)
return ua.EventNotifier.parse_bitfield(result.Value.Value)
async def set_event_notifier(self, values):
......@@ -136,23 +136,23 @@ class Node:
:param values: an iterable of EventNotifier enum values.
"""
event_notifier_bitfield = ua.EventNotifier.to_bitfield(values)
await self.set_attribute(
await self.write_attribute(
ua.AttributeIds.EventNotifier,
ua.DataValue(ua.Variant(event_notifier_bitfield, ua.VariantType.Byte))
)
async def get_node_class(self):
async def read_node_class(self):
"""
get node class attribute of node
"""
result = await self.get_attribute(ua.AttributeIds.NodeClass)
result = await self.read_attribute(ua.AttributeIds.NodeClass)
return result.Value.Value
async def get_description(self):
"""
get description attribute class of node
"""
result = await self.get_attribute(ua.AttributeIds.Description)
result = await self.read_attribute(ua.AttributeIds.Description)
return result.Value.Value
async def read_value(self):
......@@ -162,32 +162,32 @@ class Node:
WARNING: on server side, this function returns a ref to object in ua database. Do not modify it if it is a mutable
object unless you know what you are doing
"""
result = await self.get_data_value()
result = await self.write_data_value()
return result.Value.Value
get_value = read_value # legacy compatibility
async def get_data_value(self):
async def write_data_value(self):
"""
Get value of a node as a DataValue object. Only variables (and properties) have values.
An exception will be generated for other node types.
DataValue contain a variable value as a variant as well as server and source timestamps
"""
return await self.get_attribute(ua.AttributeIds.Value)
return await self.read_attribute(ua.AttributeIds.Value)
async def set_array_dimensions(self, value):
async def write_array_dimensions(self, value):
"""
Set attribute ArrayDimensions of node
make sure it has the correct data type
"""
v = ua.Variant(value, ua.VariantType.UInt32)
await self.set_attribute(ua.AttributeIds.ArrayDimensions, ua.DataValue(v))
await self.write_attribute(ua.AttributeIds.ArrayDimensions, ua.DataValue(v))
async def get_array_dimensions(self):
async def read_array_dimensions(self):
"""
Read and return ArrayDimensions attribute of node
"""
res = await self.get_attribute(ua.AttributeIds.ArrayDimensions)
res = await self.read_attribute(ua.AttributeIds.ArrayDimensions)
return res.Value.Value
async def write_value_rank(self, value):
......@@ -195,13 +195,13 @@ class Node:
Set attribute ArrayDimensions of node
"""
v = ua.Variant(value, ua.VariantType.Int32)
await self.set_attribute(ua.AttributeIds.ValueRank, ua.DataValue(v))
await self.write_attribute(ua.AttributeIds.ValueRank, ua.DataValue(v))
async def read_value_rank(self):
"""
Read and return ArrayDimensions attribute of node
"""
res = await self.get_attribute(ua.AttributeIds.ValueRank)
res = await self.read_attribute(ua.AttributeIds.ValueRank)
return res.Value.Value
async def write_value(self, value, varianttype=None):
......@@ -218,7 +218,7 @@ class Node:
data change event generated
"""
dv = value_to_datavalue(value, varianttype)
await self.set_attribute(ua.AttributeIds.Value, dv)
await self.write_attribute(ua.AttributeIds.Value, dv)
set_data_value = write_value # legacy compatibility
set_value = write_value # legacy compatibility
......@@ -236,14 +236,14 @@ class Node:
await self.unset_attr_bit(ua.AttributeIds.UserAccessLevel, ua.AccessLevel.CurrentWrite)
async def set_attr_bit(self, attr, bit):
val = await self.get_attribute(attr)
val = await self.read_attribute(attr)
val.Value.Value = ua.ua_binary.set_bit(val.Value.Value, bit)
await self.set_attribute(attr, val)
await self.write_attribute(attr, val)
async def unset_attr_bit(self, attr, bit):
val = await self.get_attribute(attr)
val = await self.read_attribute(attr)
val.Value.Value = ua.ua_binary.unset_bit(val.Value.Value, bit)
await self.set_attribute(attr, val)
await self.write_attribute(attr, val)
def set_read_only(self):
"""
......@@ -252,7 +252,7 @@ class Node:
"""
return self.set_writable(False)
async def set_attribute(self, attributeid, datavalue):
async def write_attribute(self, attributeid, datavalue):
"""
Set an attribute of a node
attributeid is a member of ua.AttributeIds
......@@ -267,7 +267,7 @@ class Node:
result = await self.server.write(params)
result[0].check()
async def get_attribute(self, attr):
async def read_attribute(self, attr):
"""
Read one attribute of a node
result code from server is checked and an exception is raised in case of error
......@@ -281,7 +281,7 @@ class Node:
result[0].StatusCode.check()
return result[0]
async def get_attributes(self, attrs):
async def read_attributes(self, attrs):
"""
Read several attributes of a node
list of DataValue is returned
......@@ -424,7 +424,7 @@ class Node:
path = [Node(self.server, ref.NodeId) for ref in path]
path.append(self)
if as_string:
path = [(await el.get_browse_name()).to_string() for el in path]
path = [(await el.read_browse_name()).to_string() for el in path]
return path
async def _get_path(self, max_length=20):
......
......@@ -239,10 +239,10 @@ async def load_type_definitions(server, nodes=None):
# generate and execute new code on the fly
generator.get_python_classes(structs_dict)
# same but using a file that is imported. This can be usefull for debugging library
# name = node.get_browse_name().Name
# name = node.read_browse_name().Name
# Make sure structure names do not contain charaters that cannot be used in Python class file names
# name = _clean_name(name)
# name = "structures_" + node.get_browse_name().Name
# name = "structures_" + node.read_browse_name().Name
# generator.save_and_import(name + ".py", append_to=structs_dict)
# register classes
......@@ -313,7 +313,7 @@ async def load_enums(server, env=None):
if env is None:
env = ua.__dict__
for node in nodes:
name = (await node.get_browse_name()).Name
name = (await node.read_browse_name()).Name
try:
c = await _get_enum_strings(name, node)
except ua.UaError as ex:
......
......@@ -36,13 +36,13 @@ class XmlExporter:
self.aliases = {}
self._addr_idx_to_xml_idx = {}
node_set_attributes = OrderedDict()
node_set_attributes['xmlns:xsi'] = 'http://www.w3.org/2001/XMLSchema-instance'
node_set_attributes['xmlns:uax'] = 'http://opcfoundation.org/UA/2008/02/Types.xsd'
node_set_attributes['xmlns:xsd'] = 'http://www.w3.org/2001/XMLSchema'
node_set_attributes['xmlns'] = 'http://opcfoundation.org/UA/2011/03/UANodeSet.xsd'
node_write_attributes = OrderedDict()
node_write_attributes['xmlns:xsi'] = 'http://www.w3.org/2001/XMLSchema-instance'
node_write_attributes['xmlns:uax'] = 'http://opcfoundation.org/UA/2008/02/Types.xsd'
node_write_attributes['xmlns:xsd'] = 'http://www.w3.org/2001/XMLSchema'
node_write_attributes['xmlns'] = 'http://opcfoundation.org/UA/2011/03/UANodeSet.xsd'
self.etree = Et.ElementTree(Et.Element('UANodeSet', node_set_attributes))
self.etree = Et.ElementTree(Et.Element('UANodeSet', node_write_attributes))
async def build_etree(self, node_list, uris=None):
"""
......@@ -91,7 +91,7 @@ class XmlExporter:
for node in nodes:
node_idxs = [node.nodeid.NamespaceIndex]
try:
node_idxs.append((await node.get_browse_name()).NamespaceIndex)
node_idxs.append((await node.read_browse_name()).NamespaceIndex)
except UaError:
self.logger.exception("Error retrieving browse name of node %s", node)
raise
......@@ -141,7 +141,7 @@ class XmlExporter:
Returns:
"""
node_class = await node.get_node_class()
node_class = await node.read_node_class()
if node_class is ua.NodeClass.Object:
await self.add_etree_object(node)
......@@ -181,10 +181,10 @@ class XmlExporter:
return bname.to_string()
async def _add_node_common(self, nodetype, node):
browsename = await node.get_browse_name()
browsename = await node.read_browse_name()
nodeid = node.nodeid
parent = await node.get_parent()
displayname = (await node.get_display_name()).Text
displayname = (await node.read_display_name()).Text
desc = await node.get_description()
if desc:
desc = desc.Text
......@@ -192,7 +192,7 @@ class XmlExporter:
node_el.attrib["NodeId"] = self._node_to_string(nodeid)
node_el.attrib["BrowseName"] = self._bname_to_string(browsename)
if parent is not None:
node_class = await node.get_node_class()
node_class = await node.read_node_class()
if node_class in (ua.NodeClass.Object, ua.NodeClass.Variable, ua.NodeClass.Method):
node_el.attrib["ParentNodeId"] = self._node_to_string(parent)
self._add_sub_el(node_el, 'DisplayName', displayname)
......@@ -206,7 +206,7 @@ class XmlExporter:
Add a UA object element to the XML etree
"""
obj_el = await self._add_node_common("UAObject", node)
var = await node.get_attribute(ua.AttributeIds.EventNotifier)
var = await node.read_attribute(ua.AttributeIds.EventNotifier)
if var.Value.Value != 0:
obj_el.attrib["EventNotifier"] = str(var.Value.Value)
await self._add_ref_els(obj_el, node)
......@@ -216,13 +216,13 @@ class XmlExporter:
Add a UA object type element to the XML etree
"""
obj_el = await self._add_node_common("UAObjectType", node)
abstract = (await node.get_attribute(ua.AttributeIds.IsAbstract)).Value.Value
abstract = (await node.read_attribute(ua.AttributeIds.IsAbstract)).Value.Value
if abstract:
obj_el.attrib["IsAbstract"] = 'true'
await self._add_ref_els(obj_el, node)
async def add_variable_common(self, node, el):
dtype = await node.get_data_type()
dtype = await node.read_data_type()
if dtype.NamespaceIndex == 0 and dtype.Identifier in o_ids.ObjectIdNames:
dtype_name = o_ids.ObjectIdNames[dtype.Identifier]
self.aliases[dtype] = dtype_name
......@@ -231,7 +231,7 @@ class XmlExporter:
rank = await node.read_value_rank()
if rank != -1:
el.attrib["ValueRank"] = str(int(rank))
dim = await node.get_attribute(ua.AttributeIds.ArrayDimensions)
dim = await node.read_attribute(ua.AttributeIds.ArrayDimensions)
if dim.Value.Value:
el.attrib["ArrayDimensions"] = ",".join([str(i) for i in dim.Value.Value])
el.attrib["DataType"] = dtype_name
......@@ -245,8 +245,8 @@ class XmlExporter:
await self._add_ref_els(var_el, node)
await self.add_variable_common(node, var_el)
accesslevel = (await node.get_attribute(ua.AttributeIds.AccessLevel)).Value.Value
useraccesslevel = (await node.get_attribute(ua.AttributeIds.UserAccessLevel)).Value.Value
accesslevel = (await node.read_attribute(ua.AttributeIds.AccessLevel)).Value.Value
useraccesslevel = (await node.read_attribute(ua.AttributeIds.UserAccessLevel)).Value.Value
# We only write these values if they are different from defaults
# Not sure where default is defined....
......@@ -255,10 +255,10 @@ class XmlExporter:
if useraccesslevel not in (0, ua.AccessLevel.CurrentRead.mask):
var_el.attrib["UserAccessLevel"] = str(useraccesslevel)
var = await node.get_attribute(ua.AttributeIds.MinimumSamplingInterval)
var = await node.read_attribute(ua.AttributeIds.MinimumSamplingInterval)
if var.Value.Value:
var_el.attrib["MinimumSamplingInterval"] = str(var.Value.Value)
var = await node.get_attribute(ua.AttributeIds.Historizing)
var = await node.read_attribute(ua.AttributeIds.Historizing)
if var.Value.Value:
var_el.attrib["Historizing"] = 'true'
......@@ -268,17 +268,17 @@ class XmlExporter:
"""
var_el = await self._add_node_common("UAVariableType", node)
await self.add_variable_common(node, var_el)
abstract = await node.get_attribute(ua.AttributeIds.IsAbstract)
abstract = await node.read_attribute(ua.AttributeIds.IsAbstract)
if abstract.Value.Value:
var_el.attrib["IsAbstract"] = "true"
await self._add_ref_els(var_el, node)
async def add_etree_method(self, node):
obj_el = await self._add_node_common("UAMethod", node)
var = await node.get_attribute(ua.AttributeIds.Executable)
var = await node.read_attribute(ua.AttributeIds.Executable)
if var.Value.Value is False:
obj_el.attrib["Executable"] = "false"
var = await node.get_attribute(ua.AttributeIds.UserExecutable)
var = await node.read_attribute(ua.AttributeIds.UserExecutable)
if var.Value.Value is False:
obj_el.attrib["UserExecutable"] = "false"
await self._add_ref_els(obj_el, node)
......@@ -286,7 +286,7 @@ class XmlExporter:
async def add_etree_reference_type(self, obj):
obj_el = await self._add_node_common("UAReferenceType", obj)
await self._add_ref_els(obj_el, obj)
var = await obj.get_attribute(ua.AttributeIds.InverseName)
var = await obj.read_attribute(ua.AttributeIds.InverseName)
if var is not None and var.Value.Value is not None and var.Value.Value.Text is not None:
self._add_sub_el(obj_el, 'InverseName', var.Value.Value.Text)
......@@ -364,7 +364,7 @@ class XmlExporter:
await self.member_to_etree(el, name, ua.NodeId(getattr(ua.ObjectIds, vtype)), getattr(val, name))
async def value_to_etree(self, el, dtype_name, dtype, node):
var = (await node.get_data_value()).Value
var = (await node.write_data_value()).Value
if var.Value is not None:
val_el = Et.SubElement(el, 'Value')
await self._value_to_etree(val_el, dtype_name, dtype, var.Value)
......
......@@ -50,7 +50,7 @@ class AttributeService:
#self.logger.debug("read %s", params)
res = []
for readvalue in params.NodesToRead:
res.append(self._aspace.get_attribute_value(readvalue.NodeId, readvalue.AttributeId))
res.append(self._aspace.read_attribute_value(readvalue.NodeId, readvalue.AttributeId))
return res
def write(self, params, user=User.Admin):
......@@ -61,14 +61,14 @@ class AttributeService:
if writevalue.AttributeId != ua.AttributeIds.Value:
res.append(ua.StatusCode(ua.StatusCodes.BadUserAccessDenied))
continue
al = self._aspace.get_attribute_value(writevalue.NodeId, ua.AttributeIds.AccessLevel)
ual = self._aspace.get_attribute_value(writevalue.NodeId, ua.AttributeIds.UserAccessLevel)
al = self._aspace.read_attribute_value(writevalue.NodeId, ua.AttributeIds.AccessLevel)
ual = self._aspace.read_attribute_value(writevalue.NodeId, ua.AttributeIds.UserAccessLevel)
if not al.StatusCode.is_good() or not ua.ua_binary.test_bit(
al.Value.Value, ua.AccessLevel.CurrentWrite) or not ua.ua_binary.test_bit(
ual.Value.Value, ua.AccessLevel.CurrentWrite):
res.append(ua.StatusCode(ua.StatusCodes.BadUserAccessDenied))
continue
res.append(self._aspace.set_attribute_value(writevalue.NodeId, writevalue.AttributeId, writevalue.Value))
res.append(self._aspace.write_attribute_value(writevalue.NodeId, writevalue.AttributeId, writevalue.Value))
return res
......@@ -382,14 +382,14 @@ class NodeManagementService:
rdesc.IsForward = addref.IsForward
rdesc.NodeId = addref.TargetNodeId
if addref.TargetNodeClass == ua.NodeClass.Unspecified:
rdesc.NodeClass = self._aspace.get_attribute_value(
rdesc.NodeClass = self._aspace.read_attribute_value(
addref.TargetNodeId, ua.AttributeIds.NodeClass).Value.Value
else:
rdesc.NodeClass = addref.TargetNodeClass
bname = self._aspace.get_attribute_value(addref.TargetNodeId, ua.AttributeIds.BrowseName).Value.Value
bname = self._aspace.read_attribute_value(addref.TargetNodeId, ua.AttributeIds.BrowseName).Value.Value
if bname:
rdesc.BrowseName = bname
dname = self._aspace.get_attribute_value(addref.TargetNodeId, ua.AttributeIds.DisplayName).Value.Value
dname = self._aspace.read_attribute_value(addref.TargetNodeId, ua.AttributeIds.DisplayName).Value.Value
if dname:
rdesc.DisplayName = dname
return self._add_unique_reference(sourcedata, rdesc)
......@@ -655,7 +655,7 @@ class AddressSpace:
self._nodes = LazyLoadingDict(shelve.open(path, "r"))
def get_attribute_value(self, nodeid, attr):
def read_attribute_value(self, nodeid, attr):
# self.logger.debug("get attr val: %s %s", nodeid, attr)
if nodeid not in self._nodes:
dv = ua.DataValue()
......@@ -671,7 +671,7 @@ class AddressSpace:
return attval.value_callback()
return attval.value
def set_attribute_value(self, nodeid, attr, value):
def write_attribute_value(self, nodeid, attr, value):
# self.logger.debug("set attr val: %s %s %s", nodeid, attr, value)
node = self._nodes.get(nodeid, None)
if node is None:
......
......@@ -53,7 +53,7 @@ class EventGenerator:
if not self.event.SourceNode:
self.event.SourceNode = emitting_node.nodeid
if not self.event.SourceName:
self.event.SourceName = (await Node(self.isession, self.event.SourceNode).get_browse_name()).Name
self.event.SourceName = (await Node(self.isession, self.event.SourceNode).read_browse_name()).Name
await emitting_node.set_event_notifier([ua.EventNotifier.SubscribeToEvents])
refs = []
......@@ -98,6 +98,6 @@ class EventGenerator:
if message:
self.event.Message = ua.LocalizedText(message)
elif not self.event.Message:
self.event.Message = ua.LocalizedText(Node(self.isession, self.event.SourceNode).get_browse_name().Text)
self.event.Message = ua.LocalizedText(Node(self.isession, self.event.SourceNode).read_browse_name().Text)
self.isession.subscription_service.trigger_event(self.event)
......@@ -204,7 +204,7 @@ class HistorySQLite(HistoryStorageInterface):
ev_aggregate_fields.extend((await get_event_properties_from_type_node(event_type)))
ev_fields = []
for field in set(ev_aggregate_fields):
ev_fields.append((await field.get_display_name()).Text)
ev_fields.append((await field.read_display_name()).Text)
return ev_fields
@staticmethod
......
......@@ -235,7 +235,7 @@ class InternalServer:
"""
Set attribute Historizing of node to True and start storing data for history
"""
await node.set_attribute(ua.AttributeIds.Historizing, ua.DataValue(True))
await node.write_attribute(ua.AttributeIds.Historizing, ua.DataValue(True))
await node.set_attr_bit(ua.AttributeIds.AccessLevel, ua.AccessLevel.HistoryRead)
await node.set_attr_bit(ua.AttributeIds.UserAccessLevel, ua.AccessLevel.HistoryRead)
await self.history_manager.historize_data_change(node, period, count)
......@@ -244,7 +244,7 @@ class InternalServer:
"""
Set attribute Historizing of node to False and stop storing data for history
"""
await node.set_attribute(ua.AttributeIds.Historizing, ua.DataValue(False))
await node.write_attribute(ua.AttributeIds.Historizing, ua.DataValue(False))
await node.unset_attr_bit(ua.AttributeIds.AccessLevel, ua.AccessLevel.HistoryRead)
await node.unset_attr_bit(ua.AttributeIds.UserAccessLevel, ua.AccessLevel.HistoryRead)
await self.history_manager.dehistorize(node)
......@@ -253,7 +253,7 @@ class InternalServer:
"""
Set attribute History Read of object events to True and start storing data for history
"""
event_notifier = await source.get_event_notifier()
event_notifier = await source.read_event_notifier()
if ua.EventNotifier.SubscribeToEvents not in event_notifier:
raise ua.UaError('Node does not generate events', event_notifier)
if ua.EventNotifier.HistoryRead not in event_notifier:
......@@ -280,12 +280,12 @@ class InternalServer:
"""
self.server_callback_dispatcher.removeListener(event, handle)
def set_attribute_value(self, nodeid, datavalue, attr=ua.AttributeIds.Value):
def write_attribute_value(self, nodeid, datavalue, attr=ua.AttributeIds.Value):
"""
directly write datavalue to the Attribute, bypassing some checks and structure creation
so it is a little faster
"""
self.aspace.set_attribute_value(nodeid, attr, datavalue)
self.aspace.write_attribute_value(nodeid, attr, datavalue)
def set_user_manager(self, user_manager):
"""
......
......@@ -74,7 +74,7 @@ class MonitoredItemService:
def trigger_datachange(self, handle, nodeid, attr):
self.logger.debug("triggering datachange for handle %s, nodeid %s, and attribute %s", handle, nodeid, attr)
dv = self.aspace.get_attribute_value(nodeid, attr)
dv = self.aspace.read_attribute_value(nodeid, attr)
self.datachange_callback(handle, dv)
def _modify_monitored_item(self, params: ua.MonitoredItemModifyRequest):
......@@ -115,7 +115,7 @@ class MonitoredItemService:
params.ItemToMonitor.AttributeId)
result, mdata = self._make_monitored_item_common(params)
ev_notify_byte = self.aspace.get_attribute_value(params.ItemToMonitor.NodeId,
ev_notify_byte = self.aspace.read_attribute_value(params.ItemToMonitor.NodeId,
ua.AttributeIds.EventNotifier).Value.Value
if ev_notify_byte is None or not ua.ua_binary.test_bit(ev_notify_byte, ua.EventNotifier.SubscribeToEvents):
......@@ -297,14 +297,14 @@ class WhereClauseEvaluator:
if isinstance(op, ua.AttributeOperand):
if op.BrowsePath:
return getattr(event, op.BrowsePath.Elements[0].TargetName.Name)
return self._aspace.get_attribute_value(event.EventType, op.AttributeId).Value.Value
return self._aspace.read_attribute_value(event.EventType, op.AttributeId).Value.Value
# FIXME: check, this is probably broken
if isinstance(op, ua.SimpleAttributeOperand):
if op.BrowsePath:
# we only support depth of 1
return getattr(event, op.BrowsePath[0].Name)
# TODO: write code for index range.... but doe it make any sense
return self._aspace.get_attribute_value(event.EventType, op.AttributeId).Value.Value
return self._aspace.read_attribute_value(event.EventType, op.AttributeId).Value.Value
if isinstance(op, ua.LiteralOperand):
return op.Value.Value
self.logger.warning("Where clause element % is not of a known type", op)
......
......@@ -622,9 +622,9 @@ class Server:
"""
return load_enums(self)
def set_attribute_value(self, nodeid, datavalue, attr=ua.AttributeIds.Value):
def write_attribute_value(self, nodeid, datavalue, attr=ua.AttributeIds.Value):
"""
directly write datavalue to the Attribute, bypasing some checks and structure creation
so it is a little faster
"""
return self.iserver.set_attribute_value(nodeid, datavalue, attr)
return self.iserver.write_attribute_value(nodeid, datavalue, attr)
......@@ -236,8 +236,8 @@ class Server:
def load_type_definitions(self):
pass
def set_attribute_value(self, nodeid, datavalue, attr=ua.AttributeIds.Value):
return self.aio_obj.set_attribute_value(nodeid, datavalue, attr)
def write_attribute_value(self, nodeid, datavalue, attr=ua.AttributeIds.Value):
return self.aio_obj.write_attribute_value(nodeid, datavalue, attr)
class EventGenerator:
......@@ -276,11 +276,11 @@ class Node:
return self.aio_obj.nodeid
@syncmethod
def get_browse_name(self):
def read_browse_name(self):
pass
@syncmethod
def get_display_name(self):
def read_display_name(self):
pass
@syncmethod
......@@ -373,11 +373,11 @@ class Node:
pass
@syncmethod
def get_node_class(self):
def read_node_class(self):
pass
@syncmethod
def get_attributes(self):
def read_attributes(self):
pass
class Subscription:
......
......@@ -138,7 +138,7 @@ async def _uaread():
try:
node = await get_node(client, args)
attr = await node.get_attribute(args.attribute)
attr = await node.read_attribute(args.attribute)
if args.datatype == "python":
print(attr.Value.Value)
elif args.datatype == "variant":
......@@ -282,7 +282,7 @@ async def _uawrite():
try:
node = await get_node(client, args)
val = _val_to_variant(args.value, args)
await node.set_attribute(args.attribute, ua.DataValue(val))
await node.write_attribute(args.attribute, ua.DataValue(val))
finally:
await client.disconnect()
......@@ -359,7 +359,7 @@ def _lsprint_long(pnode, depth, indent=""):
print("{0:30} {1:25} {2:25} {3:10} {4:30} {5:25}".format("DisplayName", "NodeId", "BrowseName", "DataType", "Timestamp", "Value"))
print("")
for node in pnode.get_children():
attrs = node.get_attributes([ua.AttributeIds.DisplayName,
attrs = node.read_attributes([ua.AttributeIds.DisplayName,
ua.AttributeIds.BrowseName,
ua.AttributeIds.NodeClass,
ua.AttributeIds.WriteMask,
......
......@@ -41,7 +41,7 @@ async def main():
#var = client.get_node(ua.NodeId(1002, 2))
#var = client.get_node("ns=3;i=2002")
#print(var)
#var.get_data_value() # get value of node as a DataValue object
#var.write_data_value() # get value of node as a DataValue object
#var.read_value() # get value of node as a python builtin
#var.write_value(ua.Variant([23], ua.VariantType.Int64)) #set node value using explicit data type
#var.write_value(3.9) # set node value using implicit data type
......
......@@ -10,10 +10,10 @@ async def browse_nodes(node: Node):
"""
Build a nested node tree dict by recursion (filtered by OPC UA objects and variables).
"""
node_class = await node.get_node_class()
node_class = await node.read_node_class()
children = []
for child in await node.get_children():
if await child.get_node_class() in [ua.NodeClass.Object, ua.NodeClass.Variable]:
if await child.read_node_class() in [ua.NodeClass.Object, ua.NodeClass.Variable]:
children.append(
await browse_nodes(child)
)
......@@ -21,13 +21,13 @@ async def browse_nodes(node: Node):
var_type = None
else:
try:
var_type = (await node.get_data_type_as_variant_type()).value
var_type = (await node.read_data_type_as_variant_type()).value
except ua.UaError:
_logger.warning('Node Variable Type could not be determined for %r', node)
var_type = None
return {
'id': node.nodeid.to_string(),
'name': (await node.get_display_name()).Text,
'name': (await node.read_display_name()).Text,
'cls': node_class.value,
'children': children,
'type': var_type,
......
......@@ -27,7 +27,7 @@ async def main():
var = await root.get_child(["0:Objects", f"{idx}:MyObject", f"{idx}:MyVariable"])
print("My variable", var, await var.read_value())
# print(var)
# var.get_data_value() # get value of node as a DataValue object
# var.write_data_value() # get value of node as a DataValue object
# var.read_value() # get value of node as a python builtin
# var.write_value(ua.Variant([23], ua.VariantType.Int64)) #set node value using explicit data type
# var.write_value(3.9) # set node value using implicit data type
......
......@@ -22,7 +22,7 @@ if __name__ == "__main__":
results = client.delete_nodes([folder, var])
try:
#var.write_value(9.89) # just to check it does not work
var.get_browse_name()
var.read_browse_name()
except ua.UaStatusCodeError:
print("The variable has been removed OK")
......
......@@ -29,7 +29,7 @@ if __name__ == "__main__":
root = client.get_root_node()
print("Root is", root)
print("childs of root are: ", root.get_children())
print("name of root is", root.get_browse_name())
print("name of root is", root.read_browse_name())
objects = client.get_objects_node()
print("childs og objects are: ", objects.get_children())
......
......@@ -67,7 +67,7 @@ if __name__ == "__main__":
es = myenum_type.add_property(0, "EnumStrings" , enum_to_stringlist(MyEnum))
es.write_value_rank(1)
es.set_array_dimensions([0])
es.write_array_dimensions([0])
# --------------------------------------------------------
# create object with enum variable
......
......@@ -124,10 +124,10 @@ async def main():
await myarrayvar.write_value(var)
await mydevice_var.write_value("Running")
myevgen.trigger(message="This is BaseEvent")
server.set_attribute_value(myvar.nodeid, ua.DataValue(0.9)) # Server side write method which is a bit faster than using write_value
server.write_attribute_value(myvar.nodeid, ua.DataValue(0.9)) # Server side write method which is a bit faster than using write_value
while True:
await asyncio.sleep(0.1)
server.set_attribute_value(myvar.nodeid, ua.DataValue(sin(time.time())))
server.write_attribute_value(myvar.nodeid, ua.DataValue(sin(time.time())))
finally:
......
......@@ -29,7 +29,7 @@ class SubHandler(object):
def datachange_notification(self, node, val, data):
# print("Python: New data change event", node, val, data)
_node_name = node.get_browse_name()
_node_name = node.read_browse_name()
setattr(self.obj, _node_name.Name, data.monitored_item.Value.Value.Value)
......@@ -42,11 +42,11 @@ class UaObject(object):
def __init__(self, asyncua_server, ua_node):
self.asyncua_server = asyncua_server
self.nodes = {}
self.b_name = ua_node.get_browse_name().Name
self.b_name = ua_node.read_browse_name().Name
# keep track of the children of this object (in case python needs to write, or get more info from UA server)
for _child in ua_node.get_children():
_child_name = _child.get_browse_name()
_child_name = _child.read_browse_name()
self.nodes[_child_name.Name] = _child
# find all children which can be subscribed to (python object is kept up to date via subscription)
......@@ -62,7 +62,7 @@ class UaObject(object):
# if a specific attr isn't passed to write, write all OPC UA children
if attr is None:
for k, node in self.nodes.items():
node_class = node.get_node_class()
node_class = node.read_node_class()
if node_class == ua.NodeClass.Variable:
node.write_value(getattr(self, k))
# only update a specific attr
......
......@@ -54,7 +54,7 @@ if __name__ == "__main__":
#var = client.get_node(ua.NodeId(1002, 2))
#var = client.get_node("ns=3;i=2002")
#print(var)
#var.get_data_value() # get value of node as a DataValue object
#var.write_data_value() # get value of node as a DataValue object
#var.read_value() # get value of node as a python builtin
#var.write_value(ua.Variant([23], ua.VariantType.Int64)) #set node value using explicit data type
#var.write_value(3.9) # set node value using implicit data type
......
......@@ -17,7 +17,7 @@ if __name__ == "__main__":
#var = client.get_node(ua.NodeId(1002, 2))
#var = client.get_node("ns=3;i=2002")
#print(var)
#var.get_data_value() # get value of node as a DataValue object
#var.write_data_value() # get value of node as a DataValue object
#var.read_value() # get value of node as a python builtin
#var.write_value(ua.Variant([23], ua.VariantType.Int64)) #set node value using explicit data type
#var.write_value(3.9) # set node value using implicit data type
......
......@@ -32,7 +32,7 @@ if __name__ == "__main__":
root = client.nodes.root
print("Root is", root)
print("childs of root are: ", root.get_children())
print("name of root is", root.get_browse_name())
print("name of root is", root.read_browse_name())
objects = client.nodes.objects
print("childs og objects are: ", objects.get_children())
myfloat = client.get_node("ns=4;s=Float")
......
......@@ -156,7 +156,7 @@ if __name__ == "__main__":
myarrayvar.write_value(var)
mydevice_var.write_value("Running")
myevgen.trigger(message="This is BaseEvent")
server.set_attribute_value(myvar.nodeid, ua.DataValue(9.9)) # Server side write method which is a but faster than using write
server.write_attribute_value(myvar.nodeid, ua.DataValue(9.9)) # Server side write method which is a but faster than using write
embed()
vup.stop()
......@@ -33,7 +33,7 @@ async def mymain():
#nb = 100000
#start = time.time()
#for i in range(nb):
#server.set_attribute_value(myvar.nodeid, ua.DataValue(i))
#server.write_attribute_value(myvar.nodeid, ua.DataValue(i))
#await myvar.write_value(i)
print("\n Write frequency: \n", nb / (time.time() - start))
......
......@@ -76,7 +76,7 @@ def test_find_endpoints(self):
# @connect
def test_get_root(self, client):
root = client.get_root_node()
self.assertEqual(root.get_browse_name(), ua.QualifiedName("Root", 0))
self.assertEqual(root.read_browse_name(), ua.QualifiedName("Root", 0))
# @connect
def test_get_root_children(self, client):
......@@ -92,7 +92,7 @@ async def test_get_namespace_array(self, client):
# @connect
def test_get_server_node(self, client):
srv = client.get_server_node()
self.assertEqual(srv.get_browse_name(), ua.QualifiedName("Server", 0))
self.assertEqual(srv.read_browse_name(), ua.QualifiedName("Server", 0))
#childs = srv.get_children()
#assert len(childs) > 4)
......@@ -100,7 +100,7 @@ def test_get_server_node(self, client):
def test_browsepathtonodeid(self, client):
root = client.get_root_node()
node = root.get_child(["0:Objects", "0:Server" , "0:ServerArray"])
self.assertEqual(node.get_browse_name(), ua.QualifiedName("ServerArray", 0))
self.assertEqual(node.read_browse_name(), ua.QualifiedName("ServerArray", 0))
# @connect
def test_subscribe_server_time(self, client):
......
......@@ -19,7 +19,7 @@ async def test_service_fault(server, admin_client):
async def test_objects_anonymous(server, client):
objects = client.get_objects_node()
with pytest.raises(ua.UaStatusCodeError):
await objects.set_attribute(ua.AttributeIds.WriteMask, ua.DataValue(999))
await objects.write_attribute(ua.AttributeIds.WriteMask, ua.DataValue(999))
with pytest.raises(ua.UaStatusCodeError):
await objects.add_folder(3, 'MyFolder')
......
......@@ -160,7 +160,7 @@ async def test_delete_nodes_recursive2(opc):
await opc.opc.delete_nodes([fold], recursive=True)
for node in mynodes:
with pytest.raises(ua.UaStatusCodeError):
await node.get_browse_name()
await node.read_browse_name()
async def test_delete_references(opc):
......@@ -218,20 +218,20 @@ async def test_delete_references(opc):
async def test_server_node(opc):
node = opc.opc.get_server_node()
assert ua.QualifiedName('Server', 0) == await node.get_browse_name()
assert ua.QualifiedName('Server', 0) == await node.read_browse_name()
async def test_root(opc):
root = opc.opc.get_root_node()
assert ua.QualifiedName('Root', 0) == await root.get_browse_name()
assert ua.LocalizedText('Root') == await root.get_display_name()
assert ua.QualifiedName('Root', 0) == await root.read_browse_name()
assert ua.LocalizedText('Root') == await root.read_display_name()
nid = ua.NodeId(84, 0)
assert nid == root.nodeid
async def test_objects(opc):
objects = opc.opc.get_objects_node()
assert ua.QualifiedName('Objects', 0) == await objects.get_browse_name()
assert ua.QualifiedName('Objects', 0) == await objects.read_browse_name()
nid = ua.NodeId(85, 0)
assert nid == objects.nodeid
......@@ -347,8 +347,8 @@ async def test_variant_array_dim(opc):
[[5.0, 5.0, 5.0, 5.0], [7.0, 8.0, 9.0, 01.0], [1.0, 1.0, 1.0, 1.0]]]
v = await objects.add_variable(3, 'variableWithDims', l)
await v.set_array_dimensions([0, 0, 0])
dim = await v.get_array_dimensions()
await v.write_array_dimensions([0, 0, 0])
dim = await v.read_array_dimensions()
assert [0, 0, 0] == dim
await v.write_value_rank(0)
......@@ -357,7 +357,7 @@ async def test_variant_array_dim(opc):
v2 = await v.read_value()
assert l == v2
dv = await v.get_data_value()
dv = await v.write_data_value()
assert [2, 3, 4] == dv.Value.Dimensions
l = [[[], [], []], [[], [], []]]
......@@ -365,7 +365,7 @@ async def test_variant_array_dim(opc):
v = await objects.add_variable(3, 'variableWithDimsEmpty', variant)
v2 = await v.read_value()
assert l == v2
dv = await v.get_data_value()
dv = await v.write_data_value()
assert [2, 3, 0] == dv.Value.Dimensions
......@@ -375,7 +375,7 @@ async def test_add_numeric_variable(opc):
nid = ua.NodeId(888, 3)
qn = ua.QualifiedName('numericnodefromstring', 3)
assert nid == v.nodeid
assert qn == await v.get_browse_name()
assert qn == await v.read_browse_name()
async def test_add_string_variable(opc):
......@@ -384,7 +384,7 @@ async def test_add_string_variable(opc):
nid = ua.NodeId('stringid', 3)
qn = ua.QualifiedName('stringnodefromstring', 3)
assert nid == v.nodeid
assert qn == await v.get_browse_name()
assert qn == await v.read_browse_name()
async def test_utf8(opc):
......@@ -397,7 +397,7 @@ async def test_utf8(opc):
assert nid == v.nodeid
val2 = await v.read_value()
assert val == val2
bn2 = await v.get_browse_name()
bn2 = await v.read_browse_name()
assert bn == bn2
......@@ -416,10 +416,10 @@ async def test_null_variable(opc):
async def test_variable_data_type(opc):
objects = opc.opc.get_objects_node()
var = await objects.add_variable(3, 'stringfordatatype', "a string")
val = await var.get_data_type_as_variant_type()
val = await var.read_data_type_as_variant_type()
assert ua.VariantType.String == val
var = await objects.add_variable(3, 'stringarrayfordatatype', ["a", "b"])
val = await var.get_data_type_as_variant_type()
val = await var.read_data_type_as_variant_type()
assert ua.VariantType.String == val
......@@ -429,7 +429,7 @@ async def test_add_string_array_variable(opc):
nid = ua.NodeId('stringarrayid', 3)
qn = ua.QualifiedName('stringarray', 9)
assert nid == v.nodeid
assert qn == await v.get_browse_name()
assert qn == await v.read_browse_name()
val = await v.read_value()
assert ['l', 'b'] == val
......@@ -440,7 +440,7 @@ async def test_add_numeric_node(opc):
qn = ua.QualifiedName('AddNodeVar1', 3)
v1 = await objects.add_variable(nid, qn, 0)
assert nid == v1.nodeid
assert qn == await v1.get_browse_name()
assert qn == await v1.read_browse_name()
async def test_add_string_node(opc):
......@@ -449,7 +449,7 @@ async def test_add_string_node(opc):
nid = ua.NodeId('AddNodeVar2Id', 3)
v2 = await objects.add_variable(nid, qn, 0)
assert nid == v2.nodeid
assert qn == await v2.get_browse_name()
assert qn == await v2.read_browse_name()
async def test_add_find_node_(opc):
......@@ -473,7 +473,7 @@ async def test_add_read_node(opc):
nid = ua.NodeId(102, 2)
assert nid == o.nodeid
qn = ua.QualifiedName('AddReadObject', 2)
assert qn == await o.get_browse_name()
assert qn == await o.read_browse_name()
async def test_simple_value(opc):
......@@ -505,7 +505,7 @@ async def test_read_server_state(opc):
async def test_bad_node(opc):
bad = opc.opc.get_node(ua.NodeId(999, 999))
with pytest.raises(ua.UaStatusCodeError):
await bad.get_browse_name()
await bad.read_browse_name()
with pytest.raises(ua.UaStatusCodeError):
await bad.write_value(89)
with pytest.raises(ua.UaStatusCodeError):
......@@ -520,7 +520,7 @@ async def test_value(opc):
v = await o.add_variable(3, 'VariableValue', var)
assert 1.98 == await v.read_value()
dvar = ua.DataValue(var)
dv = await v.get_data_value()
dv = await v.write_data_value()
assert ua.DataValue == type(dv)
assert dvar.Value == dv.Value
assert dvar.Value == var
......@@ -538,7 +538,7 @@ async def test_write_value(opc):
v2 = await v.read_value()
assert v2 == var.Value
await v.write_value(dvar)
v3 = await v.get_data_value()
v3 = await v.write_data_value()
assert v3.Value == dvar.Value
......@@ -551,7 +551,7 @@ async def test_array_value(opc):
async def test_bool_variable(opc):
o = opc.opc.get_objects_node()
v = await o.add_variable(3, 'BoolVariable', True)
dt = await v.get_data_type_as_variant_type()
dt = await v.read_data_type_as_variant_type()
assert ua.VariantType.Boolean == dt
val = await v.read_value()
assert val is True
......@@ -805,7 +805,7 @@ async def test_copy_node(opc):
p_t = await devd_t.add_property(0, "sensorx_id", "0340")
nodes = await copy_node(opc.opc.nodes.objects, dev_t)
mydevice = nodes[0]
assert ua.NodeClass.ObjectType == await mydevice.get_node_class()
assert ua.NodeClass.ObjectType == await mydevice.read_node_class()
assert 4 == len(await mydevice.get_children())
obj = await mydevice.get_child(["0:controller"])
prop = await mydevice.get_child(["0:controller", "0:state"])
......@@ -841,7 +841,7 @@ async def test_instantiate_1(opc):
nodes = await instantiate(opc.opc.nodes.objects, dev_t, bname="2:Device0001")
mydevice = nodes[0]
assert ua.NodeClass.Object == await mydevice.get_node_class()
assert ua.NodeClass.Object == await mydevice.read_node_class()
assert dev_t.nodeid == await mydevice.get_type_definition()
obj = await mydevice.get_child(["0:controller"])
prop = await mydevice.get_child(["0:controller", "0:state"])
......@@ -880,7 +880,7 @@ async def test_instantiate_string_nodeid(opc):
bname="2:InstDevice")
mydevice = nodes[0]
assert ua.NodeClass.Object == await mydevice.get_node_class()
assert ua.NodeClass.Object == await mydevice.read_node_class()
assert dev_t.nodeid == await mydevice.get_type_definition()
obj = await mydevice.get_child(["0:controller"])
obj_nodeid_ident = obj.nodeid.Identifier
......@@ -895,13 +895,13 @@ async def test_variable_with_datatype(opc):
v1 = await opc.opc.nodes.objects.add_variable(
3, 'VariableEnumType1', ua.ApplicationType.ClientAndServer, datatype=ua.NodeId(ua.ObjectIds.ApplicationType)
)
tp1 = await v1.get_data_type()
tp1 = await v1.read_data_type()
assert tp1 == ua.NodeId(ua.ObjectIds.ApplicationType)
v2 = await opc.opc.nodes.objects.add_variable(
3, 'VariableEnumType2', ua.ApplicationType.ClientAndServer, datatype=ua.NodeId(ua.ObjectIds.ApplicationType)
)
tp2 = await v2.get_data_type()
tp2 = await v2.read_data_type()
assert tp2 == ua.NodeId(ua.ObjectIds.ApplicationType)
......@@ -919,7 +919,7 @@ async def test_enum(opc):
myvar = await o.add_variable(2, "MyEnumVar", ua.LocalizedText("String1"), datatype=myenum_type.nodeid)
# myvar.set_writable(True)
# tests
assert myenum_type.nodeid == await myvar.get_data_type()
assert myenum_type.nodeid == await myvar.read_data_type()
await myvar.write_value(ua.LocalizedText("String2"))
......@@ -950,7 +950,7 @@ async def test_base_data_type(opc):
assert nint32 == await ua_utils.get_base_data_type(dtype2)
ext = await opc.opc.nodes.objects.add_variable(0, "MyExtensionObject", ua.Argument())
d = await ext.get_data_type()
d = await ext.read_data_type()
d = opc.opc.get_node(d)
assert opc.opc.get_node(ua.ObjectIds.Structure) == await ua_utils.get_base_data_type(d)
assert ua.VariantType.ExtensionObject == await ua_utils.data_type_to_variant_type(d)
......
......@@ -182,13 +182,13 @@ async def test_data_type_dict_add_dictionary(srv):
add_dictionary = getattr(srv.dict_builder, '_add_dictionary')
dict_name = 'TestDict'
dict_node = srv.srv.get_node(await add_dictionary(dict_name))
assert await dict_node.get_browse_name() == ua.QualifiedName(dict_name, srv.idx)
assert await dict_node.get_node_class() == ua.NodeClass.Variable
assert await dict_node.read_browse_name() == ua.QualifiedName(dict_name, srv.idx)
assert await dict_node.read_node_class() == ua.NodeClass.Variable
assert (await dict_node.get_parent()).nodeid == ua.NodeId(ua.ObjectIds.OPCBinarySchema_TypeSystem, 0)
assert ua.NodeId(ua.ObjectIds.HasComponent, 0) == (await dict_node.get_references(refs=ua.ObjectIds.HasComponent))[0].ReferenceTypeId
assert await dict_node.get_type_definition() == ua.NodeId(ua.ObjectIds.DataTypeDictionaryType, 0)
assert await dict_node.get_display_name() == ua.LocalizedText(dict_name)
assert await dict_node.get_data_type() == ua.NodeId(ua.ObjectIds.ByteString)
assert await dict_node.read_display_name() == ua.LocalizedText(dict_name)
assert await dict_node.read_data_type() == ua.NodeId(ua.ObjectIds.ByteString)
assert await dict_node.read_value_rank() == -1
......@@ -198,35 +198,35 @@ async def test_data_type_dict_create_data_type(srv):
assert isinstance(created_type, StructNode)
# Test data type node
type_node = srv.srv.get_node(created_type.data_type)
assert await type_node.get_browse_name() == ua.QualifiedName(type_name, srv.idx)
assert await type_node.get_node_class() == ua.NodeClass.DataType
assert await type_node.read_browse_name() == ua.QualifiedName(type_name, srv.idx)
assert await type_node.read_node_class() == ua.NodeClass.DataType
assert (await type_node.get_parent()).nodeid == ua.NodeId(ua.ObjectIds.Structure, 0)
assert ua.NodeId(ua.ObjectIds.HasSubtype, 0) == (await type_node.get_references(refs=ua.ObjectIds.HasSubtype))[0].ReferenceTypeId
assert await type_node.get_display_name() == ua.LocalizedText(type_name)
assert await type_node.read_display_name() == ua.LocalizedText(type_name)
# Test description node
n = srv.srv.get_node(srv.dict_builder.dict_id)
desc_node = await n.get_child(f"{srv.dict_builder._idx}:{type_name}")
assert await desc_node.get_browse_name() == ua.QualifiedName(type_name, srv.idx)
assert await desc_node.get_node_class() == ua.NodeClass.Variable
assert await desc_node.read_browse_name() == ua.QualifiedName(type_name, srv.idx)
assert await desc_node.read_node_class() == ua.NodeClass.Variable
assert (await desc_node.get_parent()).nodeid == srv.dict_builder.dict_id
assert ua.NodeId(ua.ObjectIds.HasComponent, 0) == (await desc_node.get_references(refs=ua.ObjectIds.HasComponent))[0].ReferenceTypeId
assert await desc_node.get_type_definition() == ua.NodeId(ua.ObjectIds.DataTypeDescriptionType, 0)
assert await desc_node.get_display_name() == ua.LocalizedText(type_name)
assert await desc_node.get_data_type() == ua.NodeId(ua.ObjectIds.String)
assert await desc_node.read_display_name() == ua.LocalizedText(type_name)
assert await desc_node.read_data_type() == ua.NodeId(ua.ObjectIds.String)
assert await desc_node.read_value() == type_name
assert await desc_node.read_value_rank() == -1
# Test object node
obj_node = (await type_node.get_children(refs=ua.ObjectIds.HasEncoding))[0]
assert await obj_node.get_browse_name() == ua.QualifiedName('Default Binary', 0)
assert await obj_node.get_node_class() == ua.NodeClass.Object
assert await obj_node.read_browse_name() == ua.QualifiedName('Default Binary', 0)
assert await obj_node.read_node_class() == ua.NodeClass.Object
assert (await obj_node.get_references(refs=ua.ObjectIds.HasEncoding))[0].NodeId == type_node.nodeid
assert ua.NodeId(ua.ObjectIds.HasEncoding, 0) == (await obj_node.get_references(refs=ua.ObjectIds.HasEncoding))[0].ReferenceTypeId
assert await obj_node.get_type_definition() == ua.NodeId(ua.ObjectIds.DataTypeEncodingType, 0)
assert await obj_node.get_display_name() == ua.LocalizedText('Default Binary')
assert len(await obj_node.get_event_notifier()) == 0
assert await obj_node.read_display_name() == ua.LocalizedText('Default Binary')
assert len(await obj_node.read_event_notifier()) == 0
# Test links, three were tested above
struct_node = srv.srv.get_node(ua.NodeId(ua.ObjectIds.Structure, 0))
......
......@@ -136,10 +136,10 @@ async def test_multiple_clients_with_subscriptions(server):
async def test_historize_events(server):
srv_node = server.get_node(ua.ObjectIds.Server)
assert await srv_node.get_event_notifier() == {ua.EventNotifier.SubscribeToEvents}
assert await srv_node.read_event_notifier() == {ua.EventNotifier.SubscribeToEvents}
srvevgen = await server.get_event_generator()
await server.iserver.enable_history_event(srv_node, period=None)
assert await srv_node.get_event_notifier() == {ua.EventNotifier.SubscribeToEvents, ua.EventNotifier.HistoryRead}
assert await srv_node.read_event_notifier() == {ua.EventNotifier.SubscribeToEvents, ua.EventNotifier.HistoryRead}
srvevgen.trigger(message='Message')
await server.iserver.disable_history_event(srv_node)
......@@ -358,10 +358,10 @@ async def test_create_custom_object_type_object_id(server):
variables = await node_type.get_variables()
assert await node_type.get_child("2:VariableString") in variables
assert ua.VariantType.String == (
await(await node_type.get_child("2:VariableString")).get_data_value()).Value.VariantType
await(await node_type.get_child("2:VariableString")).write_data_value()).Value.VariantType
assert await node_type.get_child("2:MyEnumVar") in variables
assert ua.VariantType.Int32 == (await(await node_type.get_child("2:MyEnumVar")).get_data_value()).Value.VariantType
assert ua.NodeId(ua.ObjectIds.ApplicationType) == await (await node_type.get_child("2:MyEnumVar")).get_data_type()
assert ua.VariantType.Int32 == (await(await node_type.get_child("2:MyEnumVar")).write_data_value()).Value.VariantType
assert ua.NodeId(ua.ObjectIds.ApplicationType) == await (await node_type.get_child("2:MyEnumVar")).read_data_type()
methods = await node_type.get_methods()
assert await node_type.get_child("2:MyMethod") in methods
......@@ -544,23 +544,23 @@ async def test_load_enum_values(server):
async def check_eventgenerator_source_server(evgen, server: Server):
server_node = server.get_server_node()
assert evgen.event.SourceName == (await server_node.get_browse_name()).Name
assert evgen.event.SourceName == (await server_node.read_browse_name()).Name
assert evgen.event.SourceNode == ua.NodeId(ua.ObjectIds.Server)
assert await server_node.get_event_notifier() == {ua.EventNotifier.SubscribeToEvents}
assert await server_node.read_event_notifier() == {ua.EventNotifier.SubscribeToEvents}
refs = await server_node.get_referenced_nodes(ua.ObjectIds.GeneratesEvent, ua.BrowseDirection.Forward,
ua.NodeClass.ObjectType, False)
assert len(refs) >= 1
async def check_event_generator_object(evgen, obj, emitting_node=None):
assert evgen.event.SourceName == (await obj.get_browse_name()).Name
assert evgen.event.SourceName == (await obj.read_browse_name()).Name
assert evgen.event.SourceNode == obj.nodeid
if not emitting_node:
assert await obj.get_event_notifier() == {ua.EventNotifier.SubscribeToEvents}
assert await obj.read_event_notifier() == {ua.EventNotifier.SubscribeToEvents}
refs = await obj.get_referenced_nodes(ua.ObjectIds.GeneratesEvent, ua.BrowseDirection.Forward, ua.NodeClass.ObjectType, False)
else:
assert await emitting_node.get_event_notifier() == {ua.EventNotifier.SubscribeToEvents}
assert await emitting_node.read_event_notifier() == {ua.EventNotifier.SubscribeToEvents}
refs = await emitting_node.get_referenced_nodes(ua.ObjectIds.GeneratesEvent, ua.BrowseDirection.Forward, ua.NodeClass.ObjectType, False)
assert evgen.event.EventType in [x.nodeid for x in refs]
......@@ -603,14 +603,14 @@ async def check_custom_type(ntype, base_type, server: Server, node_class=None):
includesubtypes=True)
assert base == nodes[0]
if node_class:
assert node_class == await ntype.get_node_class()
assert node_class == await ntype.read_node_class()
properties = await ntype.get_properties()
assert properties is not None
assert len(properties) == 2
assert await ntype.get_child("2:PropertyNum") in properties
assert (await(await ntype.get_child("2:PropertyNum")).get_data_value()).Value.VariantType == ua.VariantType.Int32
assert (await(await ntype.get_child("2:PropertyNum")).write_data_value()).Value.VariantType == ua.VariantType.Int32
assert await ntype.get_child("2:PropertyString") in properties
assert (await(await ntype.get_child("2:PropertyString")).get_data_value()).Value.VariantType == ua.VariantType.String
assert (await(await ntype.get_child("2:PropertyString")).write_data_value()).Value.VariantType == ua.VariantType.String
"""
......
......@@ -433,7 +433,7 @@ async def test_events_default(opc):
assert ev is not None # we did not receive event
assert ua.NodeId(ua.ObjectIds.BaseEventType) == ev.EventType
assert 1 == ev.Severity
assert (await opc.opc.get_server_node().get_browse_name()).Name == ev.SourceName
assert (await opc.opc.get_server_node().read_browse_name()).Name == ev.SourceName
assert opc.opc.get_server_node().nodeid == ev.SourceNode
assert msg == ev.Message.Text
assert tid == ev.Time
......@@ -500,7 +500,7 @@ async def test_events_CustomEvent(opc):
assert ev is not None # we did not receive event
assert etype.nodeid == ev.EventType
assert serverity == ev.Severity
assert (await opc.opc.get_server_node().get_browse_name()).Name == ev.SourceName
assert (await opc.opc.get_server_node().read_browse_name()).Name == ev.SourceName
assert opc.opc.get_server_node().nodeid == ev.SourceNode
assert msg == ev.Message.Text
assert tid == ev.Time
......
......@@ -42,7 +42,7 @@ async def test_xml_import(opc):
# Check if InputArgs are imported and can be read
node_path = ["Types", "ObjectTypes", "BaseObjectType", "1:MyObjectType", "1:MyMethod", "InputArguments"]
o = await opc.opc.get_root_node().get_child(node_path)
input_arg = (await o.get_data_value()).Value.Value[0]
input_arg = (await o.write_data_value()).Value.Value[0]
assert "Context" == input_arg.Name
......@@ -105,18 +105,18 @@ async def test_xml_vars(opc, tmpdir):
await opc.opc.delete_nodes(nodes)
await opc.opc.import_xml(tmp_path)
assert 6.78 == await v.read_value()
assert ua.NodeId(ua.ObjectIds.Double) == await v.get_data_type()
assert ua.NodeId(ua.ObjectIds.UInt16) == await a.get_data_type()
assert ua.NodeId(ua.ObjectIds.Double) == await v.read_data_type()
assert ua.NodeId(ua.ObjectIds.UInt16) == await a.read_data_type()
assert await a.read_value_rank() in (0, 1)
assert [6, 1] == await a.read_value()
assert [[1, 2], [3, 4]] == await a2.read_value()
assert ua.NodeId(ua.ObjectIds.UInt32) == await a2.get_data_type()
assert ua.NodeId(ua.ObjectIds.UInt32) == await a2.read_data_type()
assert await a2.read_value_rank() in (0, 2)
assert [2, 2] == (await a2.get_attribute(ua.AttributeIds.ArrayDimensions)).Value.Value
assert [2, 2] == (await a2.read_attribute(ua.AttributeIds.ArrayDimensions)).Value.Value
# assert a3.read_value(), [[]]) # would require special code ...
assert ua.NodeId(ua.ObjectIds.ByteString) == await a3.get_data_type()
assert ua.NodeId(ua.ObjectIds.ByteString) == await a3.read_data_type()
assert await a3.read_value_rank() in (0, 2)
assert [1, 0] == (await a3.get_attribute(ua.AttributeIds.ArrayDimensions)).Value.Value
assert [1, 0] == (await a3.read_attribute(ua.AttributeIds.ArrayDimensions)).Value.Value
async def test_xml_ns(opc, tmpdir):
......@@ -152,9 +152,9 @@ async def test_xml_ns(opc, tmpdir):
new_ns = await opc.opc.register_namespace("my_new_namespace")
new_nodes = await opc.opc.import_xml(tmp_path)
for i in [o, o50, o200]:
await i.get_browse_name()
await i.read_browse_name()
with pytest.raises(uaerrors.BadNodeIdUnknown):
await onew.get_browse_name()
await onew.read_browse_name()
# since my_new_namesspace2 is referenced byt a node it should have been reimported
nss = await opc.opc.get_namespace_array()
assert "bname_namespace" in nss
......@@ -162,23 +162,23 @@ async def test_xml_ns(opc, tmpdir):
new_ns = await opc.opc.register_namespace("my_new_namespace")
bname_ns = await opc.opc.register_namespace("bname_namespace")
onew.nodeid.NamespaceIndex = new_ns
await onew.get_browse_name()
await onew.read_browse_name()
vnew2 = (await onew.get_children())[0]
assert vnew2.nodeid.NamespaceIndex == new_ns
async def test_xml_float(opc, tmpdir):
o = await opc.opc.nodes.objects.add_variable(2, "xmlfloat", 5.67)
dtype = await o.get_data_type()
dv = await o.get_data_value()
dtype = await o.read_data_type()
dv = await o.write_data_value()
tmp_path = tmpdir.join("tmp_test_export-float.xml").strpath
await opc.opc.export_xml([o], tmp_path)
await opc.opc.delete_nodes([o])
new_nodes = await opc.opc.import_xml(tmp_path)
o2 = opc.opc.get_node(new_nodes[0])
assert o2 == o
assert await o2.get_data_type() == dtype
assert (await o2.get_data_value()).Value == dv.Value
assert await o2.read_data_type() == dtype
assert (await o2.write_data_value()).Value == dv.Value
async def test_xml_bool(opc, tmpdir):
......@@ -193,7 +193,7 @@ async def test_xml_string(opc, tmpdir):
async def test_xml_string_with_null_description(opc, tmpdir):
o = await opc.opc.nodes.objects.add_variable(2, "xmlstring", "mystring")
await o.set_attribute(ua.AttributeIds.Description, ua.DataValue(None))
await o.write_attribute(ua.AttributeIds.Description, ua.DataValue(None))
o2 = await _test_xml_var_type(opc, tmpdir, o, "string")
assert await o.get_description() == await o2.get_description()
......@@ -201,7 +201,7 @@ async def test_xml_string_with_null_description(opc, tmpdir):
async def test_xml_string_array(opc, tmpdir):
o = await opc.opc.nodes.objects.add_variable(2, "xmlstringarray", ["mystring2", "mystring3"])
node2 = await _test_xml_var_type(opc, tmpdir, o, "stringarray")
dv = await node2.get_data_value()
dv = await node2.write_data_value()
async def test_xml_guid(opc, tmpdir):
......@@ -373,36 +373,36 @@ async def test_xml_var_nillable(opc):
async def _test_xml_var_type(opc, tmpdir, node: Node, typename: str, test_equality: bool = True):
dtype = await node.get_data_type()
dv = await node.get_data_value()
dtype = await node.read_data_type()
dv = await node.write_data_value()
rank = await node.read_value_rank()
dim = await node.get_array_dimensions()
nclass = await node.get_node_class()
dim = await node.read_array_dimensions()
nclass = await node.read_node_class()
tmp_path = tmpdir.join(f"tmp_test_export-{typename}.xml").strpath
await opc.opc.export_xml([node], tmp_path)
await opc.opc.delete_nodes([node])
new_nodes = await opc.opc.import_xml(tmp_path)
node2 = opc.opc.get_node(new_nodes[0])
assert node == node
assert dtype == await node2.get_data_type()
assert dtype == await node2.read_data_type()
if test_equality:
print("DEBUG", node, dv, node2, await node2.read_value())
assert dv.Value == (await node2.get_data_value()).Value
assert dv.Value == (await node2.write_data_value()).Value
assert rank == await node2.read_value_rank()
assert dim == await node2.get_array_dimensions()
assert nclass == await node2.get_node_class()
assert dim == await node2.read_array_dimensions()
assert nclass == await node2.read_node_class()
return node2
async def test_xml_byte(opc, tmpdir):
o = await opc.opc.nodes.objects.add_variable(2, "byte", 255, ua.VariantType.Byte)
dtype = await o.get_data_type()
dv = await o.get_data_value()
dtype = await o.read_data_type()
dv = await o.write_data_value()
tmp_path = tmpdir.join("export-byte.xml").strpath
await opc.opc.export_xml([o], tmp_path)
await opc.opc.delete_nodes([o])
new_nodes = await opc.opc.import_xml(tmp_path)
o2 = opc.opc.get_node(new_nodes[0])
assert o == o2
assert dtype == await o2.get_data_type()
assert dv.Value == (await o2.get_data_value()).Value
assert dtype == await o2.read_data_type()
assert dv.Value == (await o2.write_data_value()).Value
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment