Commit 9b946e22 authored by oroulet's avatar oroulet Committed by oroulet

client and server seems to work

parent 7d735413
......@@ -168,7 +168,8 @@ class UASocketProtocol(asyncio.Protocol):
try:
self._callbackmap[request_id].set_result(body)
except KeyError:
raise ua.UaError(f"No request found for request id: {request_id}, pending are {self._callbackmap.keys()}")
#raise ua.UaError(f"No request found for request id: {request_id}, pending are {self._callbackmap.keys()}, body was {body}")
pass
except asyncio.InvalidStateError:
if not self.closed:
self.logger.warning("Future for request id %s is already done", request_id)
......
......@@ -23,7 +23,7 @@ async def instantiate(parent, node_type, nodeid=None, bname=None, dname=None, id
rdesc.TypeDefinition = node_type.nodeid
if nodeid is None:
nodeid = ua.NodeId(namespaceidx=idx) # will trigger automatic node generation in namespace idx
nodeid = ua.NodeId(NamespaceIndex=idx) # will trigger automatic node generation in namespace idx
if bname is None:
bname = rdesc.BrowseName
elif isinstance(bname, str):
......@@ -112,7 +112,7 @@ async def _instantiate_node(server,
c_node_type,
res.AddedNodeId,
c_rdesc,
nodeid=ua.NodeId(identifier=inst_nodeid, namespaceidx=res.AddedNodeId.NamespaceIndex),
nodeid=ua.NodeId(Identifier=inst_nodeid, NamespaceIndex=res.AddedNodeId.NamespaceIndex),
bname=c_rdesc.BrowseName,
instantiate_optional=instantiate_optional
)
......@@ -122,7 +122,7 @@ async def _instantiate_node(server,
c_node_type,
res.AddedNodeId,
c_rdesc,
nodeid=ua.NodeId(namespaceidx=res.AddedNodeId.NamespaceIndex),
nodeid=ua.NodeId(NamespaceIndex=res.AddedNodeId.NamespaceIndex),
bname=c_rdesc.BrowseName,
instantiate_optional=instantiate_optional
)
......
......@@ -398,7 +398,7 @@ async def _create_method(parent, nodeid, qname, callback, inputs, outputs):
if inputs:
await create_property(
method,
ua.NodeId(namespaceidx=method.nodeid.NamespaceIndex),
ua.NodeId(NamespaceIndex=method.nodeid.NamespaceIndex),
ua.QualifiedName("InputArguments", 0),
[_vtype_to_argument(vtype) for vtype in inputs],
varianttype=ua.VariantType.ExtensionObject,
......@@ -407,7 +407,7 @@ async def _create_method(parent, nodeid, qname, callback, inputs, outputs):
if outputs:
await create_property(
method,
ua.NodeId(namespaceidx=method.nodeid.NamespaceIndex),
ua.NodeId(NamespaceIndex=method.nodeid.NamespaceIndex),
ua.QualifiedName("OutputArguments", 0),
[_vtype_to_argument(vtype) for vtype in outputs],
varianttype=ua.VariantType.ExtensionObject,
......
......@@ -5,13 +5,11 @@ format is the one from opc-ua specification
import logging
import uuid
from typing import Union, Dict
from copy import copy
from asyncua import ua
from .xmlparser import XMLParser, ua_type_to_python
from ..ua.uaerrors import UaError
_logger = logging.getLogger(__name__)
......@@ -53,15 +51,11 @@ class XmlImporter:
server_model_list = []
server_namespaces_node = await self.server.nodes.namespaces.get_children()
for model_node in server_namespaces_node:
server_model_list.append(
{
"ModelUri": await (await model_node.get_child("NamespaceUri")).read_value(),
"Version": await (await model_node.get_child("NamespaceVersion")).read_value(),
"PublicationDate": (
await (await model_node.get_child("NamespacePublicationDate")).read_value()
).strftime("%Y-%m-%dT%H:%M:%SZ"),
}
)
server_model_list.append({
"ModelUri": await (await model_node.get_child("NamespaceUri")).read_value(),
"Version": await (await model_node.get_child("NamespaceVersion")).read_value(),
"PublicationDate": (await (await model_node.get_child("NamespacePublicationDate")).read_value()).strftime("%Y-%m-%dT%H:%M:%SZ"),
})
return server_model_list
async def _check_required_models(self, xmlpath=None, xmlstring=None):
......@@ -71,10 +65,7 @@ class XmlImporter:
server_model_list = await self._get_existing_model_in_namespace()
for model in server_model_list:
for req_model in req_models:
if (
model["ModelUri"] == req_model["ModelUri"]
and model["PublicationDate"] >= req_model["PublicationDate"]
):
if (model["ModelUri"] == req_model["ModelUri"] and model["PublicationDate"] >= req_model["PublicationDate"]):
if "Version" in model and "Version" in req_model:
if model["Version"] >= req_model["Version"]:
req_models.remove(req_model)
......@@ -123,15 +114,14 @@ class XmlImporter:
if missing_nodes:
_logger.warning(f"The following references exist, but the Nodes are missing: {missing_nodes}")
if len(self.refs):
_logger.warning("The following references could not be imported and are probably broken: %s", self.refs,)
_logger.warning(
"The following references could not be imported and are probably broken: %s",
self.refs,
)
return nodes
async def _add_missing_reverse_references(self, new_nodes):
__unidirectional_types = {ua.ObjectIds.GuardVariableType, ua.ObjectIds.HasGuard,
ua.ObjectIds.TransitionVariableType, ua.ObjectIds.StateMachineType,
ua.ObjectIds.StateVariableType, ua.ObjectIds.TwoStateVariableType,
ua.ObjectIds.StateType, ua.ObjectIds.TransitionType,
ua.ObjectIds.FiniteTransitionVariableType, ua.ObjectIds.HasInterface}
__unidirectional_types = {ua.ObjectIds.GuardVariableType, ua.ObjectIds.HasGuard, ua.ObjectIds.TransitionVariableType, ua.ObjectIds.StateMachineType, ua.ObjectIds.StateVariableType, ua.ObjectIds.TwoStateVariableType, ua.ObjectIds.StateType, ua.ObjectIds.TransitionType, ua.ObjectIds.FiniteTransitionVariableType, ua.ObjectIds.HasInterface}
dangling_refs_to_missing_nodes = set()
for new_node_id in new_nodes:
new_n = self.server.get_node(new_node_id)
......@@ -163,9 +153,9 @@ class XmlImporter:
for ref in nd.refs:
if ref.forward:
if ref.reftype in [
self.server.nodes.HasComponent.nodeid,
self.server.nodes.HasProperty.nodeid,
self.server.nodes.Organizes.nodeid,
self.server.nodes.HasComponent.nodeid,
self.server.nodes.HasProperty.nodeid,
self.server.nodes.Organizes.nodeid,
]:
# if a node has several links, the last one will win
if ref.target in childs:
......@@ -237,7 +227,7 @@ class XmlImporter:
field.datatype = self._to_migrated_nodeid(field.datatype)
return new_nodes
def _migrate_ns(self, nodeid: ua.NodeId) -> ua.NodeId:
def _migrate_ns(self, obj: Union[ua.NodeId, ua.QualifiedName]) -> Union[ua.NodeId, ua.QualifiedName]:
"""
Check if the index of nodeid or browsename given in the xml model file
must be converted to a already existing namespace id based on the files
......@@ -245,10 +235,13 @@ class XmlImporter:
:returns: NodeId (str)
"""
if nodeid.NamespaceIndex in self.namespaces:
nodeid = copy(nodeid)
nodeid.NamespaceIndex = self.namespaces[nodeid.NamespaceIndex]
return nodeid
if isinstance(obj, ua.NodeId):
if obj.NamespaceIndex in self.namespaces:
obj = ua.NodeId(Identifier=obj.Identifier, NamespaceIndex=self.namespaces[obj.NamespaceIndex], NodeIdType=obj.NodeIdType)
if isinstance(obj, ua.QualifiedName):
if obj.NamespaceIndex in self.namespaces:
obj = ua.QualifiedName(Name=obj.Name, NamespaceIndex=self.namespaces[obj.NamespaceIndex])
return obj
def _get_add_node_item(self, obj):
node = ua.AddNodesItem()
......@@ -322,9 +315,7 @@ class XmlImporter:
attrs.DisplayName = ua.LocalizedText(obj.displayname)
attrs.DataType = obj.datatype
if obj.value is not None:
attrs.Value = self._add_variable_value(
obj,
)
attrs.Value = self._add_variable_value(obj, )
if obj.rank:
attrs.ValueRank = obj.rank
if obj.accesslevel:
......@@ -417,20 +408,13 @@ class XmlImporter:
values.append(extobj)
return ua.Variant(values, ua.VariantType.ExtensionObject)
elif obj.valuetype == "ListOfGuid":
return ua.Variant(
[uuid.UUID(guid) for guid in obj.value], getattr(ua.VariantType, obj.valuetype[6:])
)
return ua.Variant([uuid.UUID(guid) for guid in obj.value], getattr(ua.VariantType, obj.valuetype[6:]))
elif obj.valuetype.startswith("ListOf"):
vtype = obj.valuetype[6:]
if hasattr(ua.ua_binary.Primitives, vtype):
return ua.Variant(obj.value, getattr(ua.VariantType, vtype))
elif vtype == "LocalizedText":
return ua.Variant(
[
getattr(ua, vtype)(text=item["Text"], locale=item["Locale"])
for item in obj.value
]
)
return ua.Variant([getattr(ua, vtype)(Text=item["Text"], Locale=item["Locale"]) for item in obj.value])
else:
return ua.Variant([getattr(ua, vtype)(v) for v in obj.value])
elif obj.valuetype == "ExtensionObject":
......@@ -570,11 +554,11 @@ class XmlImporter:
f = ua.EnumField()
f.Name = field.name
if field.dname:
f.DisplayName = ua.LocalizedText(text=field.dname)
f.DisplayName = ua.LocalizedText(Text=field.dname)
else:
f.DisplayName = ua.LocalizedText(text=field.name)
f.DisplayName = ua.LocalizedText(Text=field.name)
f.Value = field.value
f.Description = ua.LocalizedText(text=field.desc)
f.Description = ua.LocalizedText(Text=field.desc)
edef.Fields.append(f)
return edef
......@@ -599,7 +583,7 @@ class XmlImporter:
if f.IsOptional:
optional = True
f.ArrayDimensions = field.arraydim
f.Description = ua.LocalizedText(text=field.desc)
f.Description = ua.LocalizedText(Text=field.desc)
sdef.Fields.append(f)
if optional:
sdef.StructureType = ua.StructureType.StructureWithOptionalFields
......@@ -621,11 +605,7 @@ class XmlImporter:
all_node_ids = [data.nodeid for data in ndatas]
while ndatas:
for ndata in ndatas[:]:
if (
ndata.nodeid.NamespaceIndex not in self.namespaces.values()
or ndata.parent is None
or ndata.parent not in all_node_ids
):
if (ndata.nodeid.NamespaceIndex not in self.namespaces.values() or ndata.parent is None or ndata.parent not in all_node_ids):
sorted_ndatas.append(ndata)
sorted_nodes_ids.append(ndata.nodeid)
ndatas.remove(ndata)
......
......@@ -350,12 +350,13 @@ def nodeid_to_binary(nodeid):
def nodeid_from_binary(data):
encoding = ord(data.read(1))
nidtype = ua.NodeIdType(encoding & 0b00111111)
expanded = False
uri = None
server_idx = None
if nidtype == ua.NodeIdType.TwoByte:
identifier = ord(data.read(1))
return ua.TwoByteNodeId(identifier)
if nidtype == ua.NodeIdType.FourByte:
nidx = 0
elif nidtype == ua.NodeIdType.FourByte:
nidx, identifier = struct.unpack("<BH", data.read(3))
elif nidtype == ua.NodeIdType.Numeric:
nidx, identifier = struct.unpack("<HI", data.read(6))
......@@ -373,12 +374,10 @@ def nodeid_from_binary(data):
if test_bit(encoding, 7):
uri = Primitives.String.unpack(data)
expanded = True
if test_bit(encoding, 6):
server_idx = Primitives.UInt32.unpack(data)
expanded = True
if expanded:
if uri is not None or server_idx is not None:
return ua.ExpandedNodeId(identifier, nidx, nidtype, uri, server_idx)
return ua.NodeId(identifier, nidx, nidtype)
......@@ -449,7 +448,7 @@ def extensionobject_from_binary(data):
body = data.copy(length)
data.skip(length)
if typeid.Identifier == 0:
return None
return ua.ExtensionObject()
elif typeid in ua.extension_objects_by_typeid:
cls = ua.extension_objects_by_typeid[typeid]
if body is None:
......
"""
Autogenerate code from xml spec
Date:2021-02-22 19:54:27.985263
Date:2021-02-24 19:45:05.562631
"""
from datetime import datetime
from enum import IntEnum
from typing import Union, List
from typing import Union, List, Optional
from dataclasses import dataclass, field
from asyncua.ua.uatypes import FROZEN
......@@ -1177,12 +1177,13 @@ class DiagnosticInfo:
data_type = NodeId(ObjectIds.DiagnosticInfo)
Encoding: Byte = field(default=0, repr=False, init=False)
SymbolicId: Int32 = None
NamespaceURI: Int32 = None
Locale: Int32 = None
LocalizedText: Int32 = None
AdditionalInfo: String = None
InnerStatusCode: StatusCode = None
SymbolicId: Optional[Int32] = None
NamespaceURI: Optional[Int32] = None
Locale: Optional[Int32] = None
LocalizedText: Optional[Int32] = None
AdditionalInfo: Optional[String] = None
InnerStatusCode: Optional[StatusCode] = None
InnerDiagnosticInfo: Optional[ExtensionObject] = None
ua_switches = {
'SymbolicId': ('Encoding', 0),
......@@ -1625,6 +1626,14 @@ class DataSetWriterDataType:
TransportSettings: ExtensionObject = ExtensionObject()
MessageSettings: ExtensionObject = ExtensionObject()
@property
def DataSetFieldContentMask(self):
return self.DataSetFieldContentMask_
@DataSetFieldContentMask.setter
def DataSetFieldContentMask(self, val):
self.DataSetFieldContentMask_ = val
@dataclass(frozen=FROZEN)
class DataSetWriterTransportDataType:
......@@ -1762,6 +1771,14 @@ class FieldTargetDataType:
OverrideValueHandling_: OverrideValueHandling = OverrideValueHandling.Disabled
OverrideValue: Variant = field(default_factory=Variant)
@property
def OverrideValueHandling(self):
return self.OverrideValueHandling_
@OverrideValueHandling.setter
def OverrideValueHandling(self, val):
self.OverrideValueHandling_ = val
@dataclass(frozen=FROZEN)
class TargetVariablesDataType:
......@@ -2104,6 +2121,14 @@ class StructureDefinition:
StructureType_: StructureType = StructureType.Structure
Fields: List[StructureField] = field(default_factory=list)
@property
def StructureType(self):
return self.StructureType_
@StructureType.setter
def StructureType(self, val):
self.StructureType_ = val
@dataclass(frozen=FROZEN)
class StructureDescription:
......@@ -2122,6 +2147,14 @@ class StructureDescription:
Name: QualifiedName = field(default_factory=QualifiedName)
StructureDefinition_: StructureDefinition = field(default_factory=StructureDefinition)
@property
def StructureDefinition(self):
return self.StructureDefinition_
@StructureDefinition.setter
def StructureDefinition(self, val):
self.StructureDefinition_ = val
@dataclass(frozen=FROZEN)
class Argument:
......@@ -2218,6 +2251,14 @@ class EnumDescription:
EnumDefinition_: EnumDefinition = field(default_factory=EnumDefinition)
BuiltInType: Byte = 0
@property
def EnumDefinition(self):
return self.EnumDefinition_
@EnumDefinition.setter
def EnumDefinition(self, val):
self.EnumDefinition_ = val
@dataclass(frozen=FROZEN)
class DataTypeSchemaHeader:
......@@ -2397,6 +2438,14 @@ class ApplicationDescription:
DiscoveryProfileUri: String = None
DiscoveryUrls: List[String] = field(default_factory=list)
@property
def ApplicationType(self):
return self.ApplicationType_
@ApplicationType.setter
def ApplicationType(self, val):
self.ApplicationType_ = val
@dataclass(frozen=FROZEN)
class RequestHeader:
......@@ -2469,6 +2518,14 @@ class ServiceFault:
TypeId: NodeId = FourByteNodeId(ObjectIds.ServiceFault_Encoding_DefaultBinary)
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class SessionlessInvokeRequestType:
......@@ -2545,6 +2602,14 @@ class FindServersRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: FindServersParameters = field(default_factory=FindServersParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class FindServersResponse:
......@@ -2563,6 +2628,14 @@ class FindServersResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Servers: List[ApplicationDescription] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class ServerOnNetwork:
......@@ -2618,6 +2691,14 @@ class FindServersOnNetworkRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: FindServersOnNetworkParameters = field(default_factory=FindServersOnNetworkParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class FindServersOnNetworkResult:
......@@ -2649,6 +2730,14 @@ class FindServersOnNetworkResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: FindServersOnNetworkResult = field(default_factory=FindServersOnNetworkResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class UserTokenPolicy:
......@@ -2853,6 +2942,14 @@ class DataSetReaderDataType:
MessageSettings: ExtensionObject = ExtensionObject()
SubscribedDataSet: ExtensionObject = ExtensionObject()
@property
def DataSetFieldContentMask(self):
return self.DataSetFieldContentMask_
@DataSetFieldContentMask.setter
def DataSetFieldContentMask(self, val):
self.DataSetFieldContentMask_ = val
@dataclass(frozen=FROZEN)
class ReaderGroupDataType:
......@@ -2980,6 +3077,14 @@ class GetEndpointsRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: GetEndpointsParameters = field(default_factory=GetEndpointsParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class GetEndpointsResponse:
......@@ -2998,6 +3103,14 @@ class GetEndpointsResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Endpoints: List[EndpointDescription] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class RegisteredServer:
......@@ -3049,6 +3162,14 @@ class RegisterServerRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Server: RegisteredServer = field(default_factory=RegisteredServer)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class RegisterServerResponse:
......@@ -3064,6 +3185,14 @@ class RegisterServerResponse:
TypeId: NodeId = FourByteNodeId(ObjectIds.RegisterServerResponse_Encoding_DefaultBinary)
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class DiscoveryConfiguration:
......@@ -3118,6 +3247,14 @@ class RegisterServer2Request:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: RegisterServer2Parameters = field(default_factory=RegisterServer2Parameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class RegisterServer2Response:
......@@ -3139,6 +3276,14 @@ class RegisterServer2Response:
ConfigurationResults: List[StatusCode] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class ChannelSecurityToken:
......@@ -3200,6 +3345,14 @@ class OpenSecureChannelRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: OpenSecureChannelParameters = field(default_factory=OpenSecureChannelParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class OpenSecureChannelResult:
......@@ -3234,6 +3387,14 @@ class OpenSecureChannelResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: OpenSecureChannelResult = field(default_factory=OpenSecureChannelResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class CloseSecureChannelRequest:
......@@ -3249,6 +3410,14 @@ class CloseSecureChannelRequest:
TypeId: NodeId = FourByteNodeId(ObjectIds.CloseSecureChannelRequest_Encoding_DefaultBinary)
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class CloseSecureChannelResponse:
......@@ -3264,6 +3433,14 @@ class CloseSecureChannelResponse:
TypeId: NodeId = FourByteNodeId(ObjectIds.CloseSecureChannelResponse_Encoding_DefaultBinary)
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class SignedSoftwareCertificate:
......@@ -3343,6 +3520,14 @@ class CreateSessionRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: CreateSessionParameters = field(default_factory=CreateSessionParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class CreateSessionResult:
......@@ -3395,6 +3580,14 @@ class CreateSessionResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: CreateSessionResult = field(default_factory=CreateSessionResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class UserIdentityToken:
......@@ -3513,6 +3706,14 @@ class ActivateSessionRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: ActivateSessionParameters = field(default_factory=ActivateSessionParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class ActivateSessionResult:
......@@ -3547,6 +3748,14 @@ class ActivateSessionResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: ActivateSessionResult = field(default_factory=ActivateSessionResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class CloseSessionRequest:
......@@ -3565,6 +3774,14 @@ class CloseSessionRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
DeleteSubscriptions: Boolean = True
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class CloseSessionResponse:
......@@ -3580,6 +3797,14 @@ class CloseSessionResponse:
TypeId: NodeId = FourByteNodeId(ObjectIds.CloseSessionResponse_Encoding_DefaultBinary)
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class CancelParameters:
......@@ -3608,6 +3833,14 @@ class CancelRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: CancelParameters = field(default_factory=CancelParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class CancelResult:
......@@ -3636,6 +3869,14 @@ class CancelResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: CancelResult = field(default_factory=CancelResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class NodeAttributes:
......@@ -3993,6 +4234,14 @@ class AddNodesItem:
NodeAttributes: ExtensionObject = ExtensionObject()
TypeDefinition: ExpandedNodeId = field(default_factory=ExpandedNodeId)
@property
def NodeClass(self):
return self.NodeClass_
@NodeClass.setter
def NodeClass(self, val):
self.NodeClass_ = val
@dataclass(frozen=FROZEN)
class AddNodesResult:
......@@ -4006,6 +4255,14 @@ class AddNodesResult:
StatusCode_: StatusCode = field(default_factory=StatusCode)
AddedNodeId: NodeId = field(default_factory=NodeId)
@property
def StatusCode(self):
return self.StatusCode_
@StatusCode.setter
def StatusCode(self, val):
self.StatusCode_ = val
@dataclass(frozen=FROZEN)
class AddNodesParameters:
......@@ -4034,6 +4291,14 @@ class AddNodesRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: AddNodesParameters = field(default_factory=AddNodesParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class AddNodesResponse:
......@@ -4055,6 +4320,14 @@ class AddNodesResponse:
Results: List[AddNodesResult] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class AddReferencesItem:
......@@ -4110,6 +4383,14 @@ class AddReferencesRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: AddReferencesParameters = field(default_factory=AddReferencesParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class AddReferencesResponse:
......@@ -4131,6 +4412,14 @@ class AddReferencesResponse:
Results: List[StatusCode] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class DeleteNodesItem:
......@@ -4146,6 +4435,14 @@ class DeleteNodesItem:
NodeId_: NodeId = field(default_factory=NodeId)
DeleteTargetReferences: Boolean = True
@property
def NodeId(self):
return self.NodeId_
@NodeId.setter
def NodeId(self, val):
self.NodeId_ = val
@dataclass(frozen=FROZEN)
class DeleteNodesParameters:
......@@ -4174,6 +4471,14 @@ class DeleteNodesRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: DeleteNodesParameters = field(default_factory=DeleteNodesParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class DeleteNodesResponse:
......@@ -4195,6 +4500,14 @@ class DeleteNodesResponse:
Results: List[StatusCode] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class DeleteReferencesItem:
......@@ -4247,6 +4560,14 @@ class DeleteReferencesRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: DeleteReferencesParameters = field(default_factory=DeleteReferencesParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class DeleteReferencesResult:
......@@ -4278,6 +4599,14 @@ class DeleteReferencesResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: DeleteReferencesResult = field(default_factory=DeleteReferencesResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class ViewDescription:
......@@ -4323,6 +4652,21 @@ class BrowseDescription:
NodeClassMask: UInt32 = 0
ResultMask: UInt32 = 0
@property
def NodeId(self):
return self.NodeId_
@NodeId.setter
def NodeId(self, val):
self.NodeId_ = val
@property
def BrowseDirection(self):
return self.BrowseDirection_
@BrowseDirection.setter
def BrowseDirection(self, val):
self.BrowseDirection_ = val
@dataclass(frozen=FROZEN)
class ReferenceDescription:
......@@ -4353,6 +4697,14 @@ class ReferenceDescription:
NodeClass_: NodeClass = NodeClass.Unspecified
TypeDefinition: ExpandedNodeId = field(default_factory=ExpandedNodeId)
@property
def NodeClass(self):
return self.NodeClass_
@NodeClass.setter
def NodeClass(self, val):
self.NodeClass_ = val
@dataclass(frozen=FROZEN)
class BrowseResult:
......@@ -4369,6 +4721,14 @@ class BrowseResult:
ContinuationPoint: ByteString = None
References: List[ReferenceDescription] = field(default_factory=list)
@property
def StatusCode(self):
return self.StatusCode_
@StatusCode.setter
def StatusCode(self, val):
self.StatusCode_ = val
@dataclass(frozen=FROZEN)
class BrowseParameters:
......@@ -4403,6 +4763,14 @@ class BrowseRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: BrowseParameters = field(default_factory=BrowseParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class BrowseResponse:
......@@ -4424,6 +4792,14 @@ class BrowseResponse:
Results: List[BrowseResult] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class BrowseNextParameters:
......@@ -4455,6 +4831,14 @@ class BrowseNextRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: BrowseNextParameters = field(default_factory=BrowseNextParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class BrowseNextResult:
......@@ -4486,6 +4870,14 @@ class BrowseNextResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: BrowseNextResult = field(default_factory=BrowseNextResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class RelativePathElement:
......@@ -4534,6 +4926,14 @@ class BrowsePath:
StartingNode: NodeId = field(default_factory=NodeId)
RelativePath_: RelativePath = field(default_factory=RelativePath)
@property
def RelativePath(self):
return self.RelativePath_
@RelativePath.setter
def RelativePath(self, val):
self.RelativePath_ = val
@dataclass(frozen=FROZEN)
class BrowsePathTarget:
......@@ -4562,6 +4962,14 @@ class BrowsePathResult:
StatusCode_: StatusCode = field(default_factory=StatusCode)
Targets: List[BrowsePathTarget] = field(default_factory=list)
@property
def StatusCode(self):
return self.StatusCode_
@StatusCode.setter
def StatusCode(self, val):
self.StatusCode_ = val
@dataclass(frozen=FROZEN)
class TranslateBrowsePathsToNodeIdsParameters:
......@@ -4590,6 +4998,14 @@ class TranslateBrowsePathsToNodeIdsRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: TranslateBrowsePathsToNodeIdsParameters = field(default_factory=TranslateBrowsePathsToNodeIdsParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class TranslateBrowsePathsToNodeIdsResponse:
......@@ -4611,6 +5027,14 @@ class TranslateBrowsePathsToNodeIdsResponse:
Results: List[BrowsePathResult] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class RegisterNodesParameters:
......@@ -4639,6 +5063,14 @@ class RegisterNodesRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: RegisterNodesParameters = field(default_factory=RegisterNodesParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class RegisterNodesResult:
......@@ -4667,6 +5099,14 @@ class RegisterNodesResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: RegisterNodesResult = field(default_factory=RegisterNodesResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class UnregisterNodesParameters:
......@@ -4695,6 +5135,14 @@ class UnregisterNodesRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: UnregisterNodesParameters = field(default_factory=UnregisterNodesParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class UnregisterNodesResponse:
......@@ -4710,6 +5158,14 @@ class UnregisterNodesResponse:
TypeId: NodeId = FourByteNodeId(ObjectIds.UnregisterNodesResponse_Encoding_DefaultBinary)
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class EndpointConfiguration:
......@@ -4764,6 +5220,14 @@ class QueryDataDescription:
AttributeId: UInt32 = 0
IndexRange: String = None
@property
def RelativePath(self):
return self.RelativePath_
@RelativePath.setter
def RelativePath(self, val):
self.RelativePath_ = val
@dataclass(frozen=FROZEN)
class NodeTypeDescription:
......@@ -4821,6 +5285,14 @@ class NodeReference:
IsForward: Boolean = True
ReferencedNodeIds: List[NodeId] = field(default_factory=list)
@property
def NodeId(self):
return self.NodeId_
@NodeId.setter
def NodeId(self, val):
self.NodeId_ = val
@dataclass(frozen=FROZEN)
class ContentFilterElement:
......@@ -4836,6 +5308,14 @@ class ContentFilterElement:
FilterOperator_: FilterOperator = FilterOperator.Equals
FilterOperands: List[ExtensionObject] = field(default_factory=list)
@property
def FilterOperator(self):
return self.FilterOperator_
@FilterOperator.setter
def FilterOperator(self, val):
self.FilterOperator_ = val
@dataclass(frozen=FROZEN)
class ContentFilter:
......@@ -4896,6 +5376,14 @@ class AttributeOperand:
AttributeId: UInt32 = 0
IndexRange: String = None
@property
def NodeId(self):
return self.NodeId_
@NodeId.setter
def NodeId(self, val):
self.NodeId_ = val
@dataclass(frozen=FROZEN)
class SimpleAttributeOperand:
......@@ -4951,6 +5439,14 @@ class ContentFilterElementResult:
OperandStatusCodes: List[StatusCode] = field(default_factory=list)
OperandDiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def StatusCode(self):
return self.StatusCode_
@StatusCode.setter
def StatusCode(self, val):
self.StatusCode_ = val
@dataclass(frozen=FROZEN)
class ContentFilterResult:
......@@ -4980,6 +5476,14 @@ class ParsingResult:
DataStatusCodes: List[StatusCode] = field(default_factory=list)
DataDiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def StatusCode(self):
return self.StatusCode_
@StatusCode.setter
def StatusCode(self, val):
self.StatusCode_ = val
@dataclass(frozen=FROZEN)
class QueryFirstParameters:
......@@ -5020,6 +5524,14 @@ class QueryFirstRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: QueryFirstParameters = field(default_factory=QueryFirstParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class QueryFirstResult:
......@@ -5060,6 +5572,14 @@ class QueryFirstResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: QueryFirstResult = field(default_factory=QueryFirstResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class QueryNextParameters:
......@@ -5091,6 +5611,14 @@ class QueryNextRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: QueryNextParameters = field(default_factory=QueryNextParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class QueryNextResult:
......@@ -5122,6 +5650,14 @@ class QueryNextResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: QueryNextResult = field(default_factory=QueryNextResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class ReadValueId:
......@@ -5143,6 +5679,14 @@ class ReadValueId:
IndexRange: String = None
DataEncoding: QualifiedName = field(default_factory=QualifiedName)
@property
def NodeId(self):
return self.NodeId_
@NodeId.setter
def NodeId(self, val):
self.NodeId_ = val
@dataclass(frozen=FROZEN)
class ReadParameters:
......@@ -5159,6 +5703,14 @@ class ReadParameters:
TimestampsToReturn_: TimestampsToReturn = TimestampsToReturn.Source
NodesToRead: List[ReadValueId] = field(default_factory=list)
@property
def TimestampsToReturn(self):
return self.TimestampsToReturn_
@TimestampsToReturn.setter
def TimestampsToReturn(self, val):
self.TimestampsToReturn_ = val
@dataclass(frozen=FROZEN)
class ReadRequest:
......@@ -5177,6 +5729,14 @@ class ReadRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: ReadParameters = field(default_factory=ReadParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class ReadResponse:
......@@ -5198,6 +5758,14 @@ class ReadResponse:
Results: List[DataValue] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class HistoryReadValueId:
......@@ -5219,6 +5787,14 @@ class HistoryReadValueId:
DataEncoding: QualifiedName = field(default_factory=QualifiedName)
ContinuationPoint: ByteString = None
@property
def NodeId(self):
return self.NodeId_
@NodeId.setter
def NodeId(self, val):
self.NodeId_ = val
@dataclass(frozen=FROZEN)
class HistoryReadResult:
......@@ -5235,6 +5811,14 @@ class HistoryReadResult:
ContinuationPoint: ByteString = None
HistoryData: ExtensionObject = ExtensionObject()
@property
def StatusCode(self):
return self.StatusCode_
@StatusCode.setter
def StatusCode(self, val):
self.StatusCode_ = val
@dataclass(frozen=FROZEN)
class HistoryReadDetails:
......@@ -5358,6 +5942,14 @@ class HistoryReadParameters:
ReleaseContinuationPoints: Boolean = True
NodesToRead: List[HistoryReadValueId] = field(default_factory=list)
@property
def TimestampsToReturn(self):
return self.TimestampsToReturn_
@TimestampsToReturn.setter
def TimestampsToReturn(self, val):
self.TimestampsToReturn_ = val
@dataclass(frozen=FROZEN)
class HistoryReadRequest:
......@@ -5376,6 +5968,14 @@ class HistoryReadRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: HistoryReadParameters = field(default_factory=HistoryReadParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class HistoryReadResponse:
......@@ -5397,6 +5997,14 @@ class HistoryReadResponse:
Results: List[HistoryReadResult] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class WriteValue:
......@@ -5418,6 +6026,14 @@ class WriteValue:
IndexRange: String = None
Value: DataValue = field(default_factory=DataValue)
@property
def NodeId(self):
return self.NodeId_
@NodeId.setter
def NodeId(self, val):
self.NodeId_ = val
@dataclass(frozen=FROZEN)
class WriteParameters:
......@@ -5446,6 +6062,14 @@ class WriteRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: WriteParameters = field(default_factory=WriteParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class WriteResponse:
......@@ -5467,6 +6091,14 @@ class WriteResponse:
Results: List[StatusCode] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class HistoryUpdateDetails:
......@@ -5479,6 +6111,14 @@ class HistoryUpdateDetails:
NodeId_: NodeId = field(default_factory=NodeId)
@property
def NodeId(self):
return self.NodeId_
@NodeId.setter
def NodeId(self, val):
self.NodeId_ = val
@dataclass(frozen=FROZEN)
class UpdateDataDetails:
......@@ -5497,6 +6137,14 @@ class UpdateDataDetails:
PerformInsertReplace: PerformUpdateType = PerformUpdateType.Insert
UpdateValues: List[DataValue] = field(default_factory=list)
@property
def NodeId(self):
return self.NodeId_
@NodeId.setter
def NodeId(self, val):
self.NodeId_ = val
@dataclass(frozen=FROZEN)
class UpdateStructureDataDetails:
......@@ -5515,6 +6163,14 @@ class UpdateStructureDataDetails:
PerformInsertReplace: PerformUpdateType = PerformUpdateType.Insert
UpdateValues: List[DataValue] = field(default_factory=list)
@property
def NodeId(self):
return self.NodeId_
@NodeId.setter
def NodeId(self, val):
self.NodeId_ = val
@dataclass(frozen=FROZEN)
class DeleteRawModifiedDetails:
......@@ -5536,6 +6192,14 @@ class DeleteRawModifiedDetails:
StartTime: DateTime = datetime.utcnow()
EndTime: DateTime = datetime.utcnow()
@property
def NodeId(self):
return self.NodeId_
@NodeId.setter
def NodeId(self, val):
self.NodeId_ = val
@dataclass(frozen=FROZEN)
class DeleteAtTimeDetails:
......@@ -5551,6 +6215,14 @@ class DeleteAtTimeDetails:
NodeId_: NodeId = field(default_factory=NodeId)
ReqTimes: List[DateTime] = field(default_factory=list)
@property
def NodeId(self):
return self.NodeId_
@NodeId.setter
def NodeId(self, val):
self.NodeId_ = val
@dataclass(frozen=FROZEN)
class DeleteEventDetails:
......@@ -5566,6 +6238,14 @@ class DeleteEventDetails:
NodeId_: NodeId = field(default_factory=NodeId)
EventIds: List[ByteString] = field(default_factory=list)
@property
def NodeId(self):
return self.NodeId_
@NodeId.setter
def NodeId(self, val):
self.NodeId_ = val
@dataclass(frozen=FROZEN)
class HistoryUpdateResult:
......@@ -5582,6 +6262,14 @@ class HistoryUpdateResult:
OperationResults: List[StatusCode] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def StatusCode(self):
return self.StatusCode_
@StatusCode.setter
def StatusCode(self, val):
self.StatusCode_ = val
@dataclass(frozen=FROZEN)
class HistoryUpdateParameters:
......@@ -5610,6 +6298,14 @@ class HistoryUpdateRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: HistoryUpdateParameters = field(default_factory=HistoryUpdateParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class HistoryUpdateResponse:
......@@ -5631,6 +6327,14 @@ class HistoryUpdateResponse:
Results: List[HistoryUpdateResult] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class CallMethodRequest:
......@@ -5668,6 +6372,14 @@ class CallMethodResult:
InputArgumentDiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
OutputArguments: List[Variant] = field(default_factory=list)
@property
def StatusCode(self):
return self.StatusCode_
@StatusCode.setter
def StatusCode(self, val):
self.StatusCode_ = val
@dataclass(frozen=FROZEN)
class CallParameters:
......@@ -5696,6 +6408,14 @@ class CallRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: CallParameters = field(default_factory=CallParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class CallResponse:
......@@ -5717,6 +6437,14 @@ class CallResponse:
Results: List[CallMethodResult] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class MonitoringFilter:
......@@ -5827,6 +6555,14 @@ class ReadProcessedDetails:
AggregateType: List[NodeId] = field(default_factory=list)
AggregateConfiguration_: AggregateConfiguration = field(default_factory=AggregateConfiguration)
@property
def AggregateConfiguration(self):
return self.AggregateConfiguration_
@AggregateConfiguration.setter
def AggregateConfiguration(self, val):
self.AggregateConfiguration_ = val
@dataclass(frozen=FROZEN)
class AggregateFilter:
......@@ -5848,6 +6584,14 @@ class AggregateFilter:
ProcessingInterval: Double = 0
AggregateConfiguration_: AggregateConfiguration = field(default_factory=AggregateConfiguration)
@property
def AggregateConfiguration(self):
return self.AggregateConfiguration_
@AggregateConfiguration.setter
def AggregateConfiguration(self, val):
self.AggregateConfiguration_ = val
@dataclass(frozen=FROZEN)
class MonitoringFilterResult:
......@@ -5926,6 +6670,14 @@ class MonitoredItemCreateRequest:
MonitoringMode_: MonitoringMode = MonitoringMode.Disabled
RequestedParameters: MonitoringParameters = field(default_factory=MonitoringParameters)
@property
def MonitoringMode(self):
return self.MonitoringMode_
@MonitoringMode.setter
def MonitoringMode(self, val):
self.MonitoringMode_ = val
@dataclass(frozen=FROZEN)
class MonitoredItemCreateResult:
......@@ -5948,6 +6700,14 @@ class MonitoredItemCreateResult:
RevisedQueueSize: UInt32 = 0
FilterResult: ExtensionObject = ExtensionObject()
@property
def StatusCode(self):
return self.StatusCode_
@StatusCode.setter
def StatusCode(self, val):
self.StatusCode_ = val
@dataclass(frozen=FROZEN)
class CreateMonitoredItemsParameters:
......@@ -5964,6 +6724,14 @@ class CreateMonitoredItemsParameters:
TimestampsToReturn_: TimestampsToReturn = TimestampsToReturn.Source
ItemsToCreate: List[MonitoredItemCreateRequest] = field(default_factory=list)
@property
def TimestampsToReturn(self):
return self.TimestampsToReturn_
@TimestampsToReturn.setter
def TimestampsToReturn(self, val):
self.TimestampsToReturn_ = val
@dataclass(frozen=FROZEN)
class CreateMonitoredItemsRequest:
......@@ -5982,6 +6750,14 @@ class CreateMonitoredItemsRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: CreateMonitoredItemsParameters = field(default_factory=CreateMonitoredItemsParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class CreateMonitoredItemsResponse:
......@@ -6003,6 +6779,14 @@ class CreateMonitoredItemsResponse:
Results: List[MonitoredItemCreateResult] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class MonitoredItemModifyRequest:
......@@ -6037,6 +6821,14 @@ class MonitoredItemModifyResult:
RevisedQueueSize: UInt32 = 0
FilterResult: ExtensionObject = ExtensionObject()
@property
def StatusCode(self):
return self.StatusCode_
@StatusCode.setter
def StatusCode(self, val):
self.StatusCode_ = val
@dataclass(frozen=FROZEN)
class ModifyMonitoredItemsParameters:
......@@ -6053,6 +6845,14 @@ class ModifyMonitoredItemsParameters:
TimestampsToReturn_: TimestampsToReturn = TimestampsToReturn.Source
ItemsToModify: List[MonitoredItemModifyRequest] = field(default_factory=list)
@property
def TimestampsToReturn(self):
return self.TimestampsToReturn_
@TimestampsToReturn.setter
def TimestampsToReturn(self, val):
self.TimestampsToReturn_ = val
@dataclass(frozen=FROZEN)
class ModifyMonitoredItemsRequest:
......@@ -6071,6 +6871,14 @@ class ModifyMonitoredItemsRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: ModifyMonitoredItemsParameters = field(default_factory=ModifyMonitoredItemsParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class ModifyMonitoredItemsResponse:
......@@ -6092,6 +6900,14 @@ class ModifyMonitoredItemsResponse:
Results: List[MonitoredItemModifyResult] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class SetMonitoringModeParameters:
......@@ -6108,6 +6924,14 @@ class SetMonitoringModeParameters:
MonitoringMode_: MonitoringMode = MonitoringMode.Disabled
MonitoredItemIds: List[UInt32] = field(default_factory=list)
@property
def MonitoringMode(self):
return self.MonitoringMode_
@MonitoringMode.setter
def MonitoringMode(self, val):
self.MonitoringMode_ = val
@dataclass(frozen=FROZEN)
class SetMonitoringModeRequest:
......@@ -6126,6 +6950,14 @@ class SetMonitoringModeRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: SetMonitoringModeParameters = field(default_factory=SetMonitoringModeParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class SetMonitoringModeResult:
......@@ -6157,6 +6989,14 @@ class SetMonitoringModeResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: SetMonitoringModeResult = field(default_factory=SetMonitoringModeResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class SetTriggeringParameters:
......@@ -6194,6 +7034,14 @@ class SetTriggeringRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: SetTriggeringParameters = field(default_factory=SetTriggeringParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class SetTriggeringResult:
......@@ -6231,6 +7079,14 @@ class SetTriggeringResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: SetTriggeringResult = field(default_factory=SetTriggeringResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class DeleteMonitoredItemsParameters:
......@@ -6262,6 +7118,14 @@ class DeleteMonitoredItemsRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: DeleteMonitoredItemsParameters = field(default_factory=DeleteMonitoredItemsParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class DeleteMonitoredItemsResponse:
......@@ -6283,6 +7147,14 @@ class DeleteMonitoredItemsResponse:
Results: List[StatusCode] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class CreateSubscriptionParameters:
......@@ -6326,6 +7198,14 @@ class CreateSubscriptionRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: CreateSubscriptionParameters = field(default_factory=CreateSubscriptionParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class CreateSubscriptionResult:
......@@ -6363,6 +7243,14 @@ class CreateSubscriptionResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: CreateSubscriptionResult = field(default_factory=CreateSubscriptionResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class ModifySubscriptionParameters:
......@@ -6406,6 +7294,14 @@ class ModifySubscriptionRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: ModifySubscriptionParameters = field(default_factory=ModifySubscriptionParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class ModifySubscriptionResult:
......@@ -6440,6 +7336,14 @@ class ModifySubscriptionResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: ModifySubscriptionResult = field(default_factory=ModifySubscriptionResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class SetPublishingModeParameters:
......@@ -6471,6 +7375,14 @@ class SetPublishingModeRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: SetPublishingModeParameters = field(default_factory=SetPublishingModeParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class SetPublishingModeResult:
......@@ -6502,6 +7414,14 @@ class SetPublishingModeResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: SetPublishingModeResult = field(default_factory=SetPublishingModeResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class NotificationMessage:
......@@ -6630,6 +7550,14 @@ class UpdateEventDetails:
Filter: EventFilter = field(default_factory=EventFilter)
EventData: List[HistoryEventFieldList] = field(default_factory=list)
@property
def NodeId(self):
return self.NodeId_
@NodeId.setter
def NodeId(self, val):
self.NodeId_ = val
@dataclass(frozen=FROZEN)
class StatusChangeNotification:
......@@ -6645,6 +7573,14 @@ class StatusChangeNotification:
Status: StatusCode = field(default_factory=StatusCode)
DiagnosticInfo_: DiagnosticInfo = field(default_factory=DiagnosticInfo)
@property
def DiagnosticInfo(self):
return self.DiagnosticInfo_
@DiagnosticInfo.setter
def DiagnosticInfo(self, val):
self.DiagnosticInfo_ = val
@dataclass(frozen=FROZEN)
class SubscriptionAcknowledgement:
......@@ -6688,6 +7624,14 @@ class PublishRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: PublishParameters = field(default_factory=PublishParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class PublishResult:
......@@ -6713,6 +7657,14 @@ class PublishResult:
Results: List[StatusCode] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def NotificationMessage(self):
return self.NotificationMessage_
@NotificationMessage.setter
def NotificationMessage(self, val):
self.NotificationMessage_ = val
@dataclass(frozen=FROZEN)
class PublishResponse:
......@@ -6731,6 +7683,14 @@ class PublishResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: PublishResult = field(default_factory=PublishResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class RepublishParameters:
......@@ -6762,6 +7722,14 @@ class RepublishRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: RepublishParameters = field(default_factory=RepublishParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class RepublishResponse:
......@@ -6780,6 +7748,21 @@ class RepublishResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
NotificationMessage_: NotificationMessage = field(default_factory=NotificationMessage)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@property
def NotificationMessage(self):
return self.NotificationMessage_
@NotificationMessage.setter
def NotificationMessage(self, val):
self.NotificationMessage_ = val
@dataclass(frozen=FROZEN)
class TransferResult:
......@@ -6793,6 +7776,14 @@ class TransferResult:
StatusCode_: StatusCode = field(default_factory=StatusCode)
AvailableSequenceNumbers: List[UInt32] = field(default_factory=list)
@property
def StatusCode(self):
return self.StatusCode_
@StatusCode.setter
def StatusCode(self, val):
self.StatusCode_ = val
@dataclass(frozen=FROZEN)
class TransferSubscriptionsParameters:
......@@ -6824,6 +7815,14 @@ class TransferSubscriptionsRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: TransferSubscriptionsParameters = field(default_factory=TransferSubscriptionsParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class TransferSubscriptionsResult:
......@@ -6855,6 +7854,14 @@ class TransferSubscriptionsResponse:
ResponseHeader_: ResponseHeader = field(default_factory=ResponseHeader)
Parameters: TransferSubscriptionsResult = field(default_factory=TransferSubscriptionsResult)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class DeleteSubscriptionsParameters:
......@@ -6883,6 +7890,14 @@ class DeleteSubscriptionsRequest:
RequestHeader_: RequestHeader = field(default_factory=RequestHeader)
Parameters: DeleteSubscriptionsParameters = field(default_factory=DeleteSubscriptionsParameters)
@property
def RequestHeader(self):
return self.RequestHeader_
@RequestHeader.setter
def RequestHeader(self, val):
self.RequestHeader_ = val
@dataclass(frozen=FROZEN)
class DeleteSubscriptionsResponse:
......@@ -6904,6 +7919,14 @@ class DeleteSubscriptionsResponse:
Results: List[StatusCode] = field(default_factory=list)
DiagnosticInfos: List[DiagnosticInfo] = field(default_factory=list)
@property
def ResponseHeader(self):
return self.ResponseHeader_
@ResponseHeader.setter
def ResponseHeader(self, val):
self.ResponseHeader_ = val
@dataclass(frozen=FROZEN)
class BuildInfo:
......@@ -6949,6 +7972,14 @@ class RedundantServerDataType:
ServiceLevel: Byte = 0
ServerState_: ServerState = ServerState.Running
@property
def ServerState(self):
return self.ServerState_
@ServerState.setter
def ServerState(self, val):
self.ServerState_ = val
@dataclass(frozen=FROZEN)
class EndpointUrlListDataType:
......@@ -7069,6 +8100,14 @@ class ServerStatusDataType:
SecondsTillShutdown: UInt32 = 0
ShutdownReason: LocalizedText = field(default_factory=LocalizedText)
@property
def BuildInfo(self):
return self.BuildInfo_
@BuildInfo.setter
def BuildInfo(self, val):
self.BuildInfo_ = val
@dataclass(frozen=FROZEN)
class SessionSecurityDiagnosticsDataType:
......@@ -7271,6 +8310,21 @@ class StatusResult:
StatusCode_: StatusCode = field(default_factory=StatusCode)
DiagnosticInfo_: DiagnosticInfo = field(default_factory=DiagnosticInfo)
@property
def StatusCode(self):
return self.StatusCode_
@StatusCode.setter
def StatusCode(self, val):
self.StatusCode_ = val
@property
def DiagnosticInfo(self):
return self.DiagnosticInfo_
@DiagnosticInfo.setter
def DiagnosticInfo(self, val):
self.DiagnosticInfo_ = val
@dataclass(frozen=FROZEN)
class SubscriptionDiagnosticsDataType:
......
......@@ -11,16 +11,16 @@ OPC_TCP_SCHEME = 'opc.tcp'
@dataclass
class Hello(uatypes.FrozenClass):
ProtocolVersion: uatypes.UInt32 = 0
# the following values couldbe set to 0 (meaning no limits)
# unfortunaltely many servers do not support it
# even newer version of prosys are broken
# so we set then to a high value known to work most places
ReceiveBufferSize: uatypes.UInt32 = 2**31 - 1
SendBufferSize: uatypes.UInt32 = 2**31 - 1
MaxMessageSize: uatypes.UInt32 = 2**31 - 1
MaxChunkCount: uatypes.UInt32 = 2**31 - 1
EndpointUrl: uatypes.String = ""
ProtocolVersion: uatypes.UInt32 = 0
# the following values couldbe set to 0 (meaning no limits)
# unfortunaltely many servers do not support it
# even newer version of prosys are broken
# so we set then to a high value known to work most places
ReceiveBufferSize: uatypes.UInt32 = 2**31 - 1
SendBufferSize: uatypes.UInt32 = 2**31 - 1
MaxMessageSize: uatypes.UInt32 = 2**31 - 1
MaxChunkCount: uatypes.UInt32 = 2**31 - 1
EndpointUrl: uatypes.String = ""
@dataclass
......@@ -49,6 +49,7 @@ class Header(uatypes.FrozenClass):
ChannelId: int = 0
body_size = 0
packet_size = 0
header_size = 8
def add_size(self, size):
self.body_size += size
......
......@@ -263,7 +263,7 @@ class StatusCode:
:vartype doc: string
"""
value: UInt32 = 0
value: UInt32 = status_codes.StatusCodes.Good
def __post_init__(self):
if isinstance(self.value, str):
......@@ -385,7 +385,6 @@ class NodeId:
def __lt__(self, other):
if not isinstance(other, NodeId):
raise AttributeError("Can only compare to NodeId")
print("COMPARE", self, other)
print (self.NodeIdType, self.NamespaceIndex, self.Identifier, other.NodeIdType, other.NamespaceIndex, other.Identifier)
return (self.NodeIdType, self.NamespaceIndex, self.Identifier) < (other.NodeIdType, other.NamespaceIndex, other.Identifier)
......@@ -643,7 +642,7 @@ class ExtensionObject:
TypeId: NodeId = NodeId()
Encoding: Byte = field(default=0, repr=False, init=False)
Body: Optional[ByteString] = b""
Body: Optional[ByteString] = None
def __bool__(self):
return self.Body is not None
......@@ -910,7 +909,7 @@ class DataValue:
Encoding: Byte = field(default=0, repr=False, init=False)
Value: Optional[Variant] = None
StatusCode: Optional[StatusCode] = None # field(default_factory=StatusCode)
StatusCode_: Optional[StatusCode] = field(default_factory=StatusCode)
SourceTimestamp: Optional[DateTime] = None
SourcePicoseconds: Optional[UInt16] = None
ServerTimestamp: Optional[DateTime] = None
......@@ -922,6 +921,14 @@ class DataValue:
if not isinstance(self.Value, Variant):
self.Value = Variant(self.Value)
@property
def StatusCode(self):
return self.StatusCode_
@StatusCode.setter
def StatusCode(self, val):
self.StatusCode_ = val
def datatype_to_varianttype(int_type):
"""
......
......@@ -7,9 +7,6 @@ from asyncua import ua, Server
from asyncua.common.methods import uamethod
logging.basicConfig(level=logging.INFO)
_logger = logging.getLogger('asyncua')
@uamethod
def func(parent, value):
......@@ -17,6 +14,7 @@ def func(parent, value):
async def main():
_logger = logging.getLogger('asyncua')
# setup our server
server = Server()
await server.init()
......@@ -43,4 +41,7 @@ async def main():
if __name__ == '__main__':
asyncio.run(main())
logging.basicConfig(level=logging.DEBUG)
asyncio.run(main(), debug=True)
......@@ -80,7 +80,7 @@ class CodeGenerator:
self.write('')
self.write('from datetime import datetime')
self.write('from enum import IntEnum')
self.write('from typing import Union, List')
self.write('from typing import Union, List, Optional')
self.write('from dataclasses import dataclass, field')
self.write('')
# self.write('from asyncua.ua.uaerrors import UaError')
......@@ -137,14 +137,21 @@ class CodeGenerator:
if "BodyLength" in [f.name for f in obj.fields]:
extobj_hack = True
hack_names = []
for field in obj.fields:
# FIXME; flag optional those that are optional
if field.length:
typestring = f"List[{field.uatype}]"
elif field.switchfield is not None:
typestring = f"Optional[{field.uatype}]"
else:
typestring = field.uatype
if field.name == field.uatype: # help!!! selv referencing class
if field.name == field.uatype:
# variable name and type name are the same. Dataclass do not like it
print("SELF REFENCING", obj, field)
hack_names.append(field.name)
fieldname = field.name + "_"
else:
fieldname = field.name
......@@ -153,8 +160,8 @@ class CodeGenerator:
val = 0 if not extobj_hack else 1
self.write(f"{field.name}: Byte = field(default={val}, repr=False, init=False)")
elif field.uatype == obj.name: # help!!! selv referencing class
pass
#FIXME: handle
#FIXME: handle better
self.write(f"{fieldname}: Optional[ExtensionObject] = None")
elif obj.name not in ("ExtensionObject",) and \
field.name == "TypeId": # and ( obj.name.endswith("Request") or obj.name.endswith("Response")):
self.write(f"TypeId: NodeId = FourByteNodeId(ObjectIds.{obj.name}_Encoding_DefaultBinary)")
......@@ -175,6 +182,17 @@ class CodeGenerator:
if switch_written:
self.write("}")
if hack_names:
self.write("")
for name in hack_names:
self.write("@property")
self.write(f"def {name}(self):")
self.write(f" return self.{name}_")
self.write("")
self.write(f"@{name}.setter")
self.write(f"def {name}(self, val):")
self.write(f" self.{name}_ = val")
self.iidx = 0
def write_unpack_enum(self, name, enum):
......
......@@ -441,6 +441,13 @@ def test_null_string():
assert v.Value == v2.Value
def test_empty_extension_object():
obj = ua.ExtensionObject()
obj2 = extensionobject_from_binary(ua.utils.Buffer(extensionobject_to_binary(obj)))
assert type(obj) == type(obj2)
assert obj == obj2
def test_extension_object():
obj = ua.UserNameIdentityToken()
obj.UserName = "admin"
......@@ -732,6 +739,8 @@ def test_bin_data_type_def():
dta = ua.DataTypeAttributes()
dta.DisplayName = ua.LocalizedText("titi")
ad.NodeAttributes = dta
from IPython import embed
embed()
data = struct_to_binary(ad)
ad2 = struct_from_binary(ua.AddNodesItem, ua.utils.Buffer(data))
......@@ -746,3 +755,24 @@ def test_bin_datattributes():
data = struct_to_binary(dta)
dta2 = struct_from_binary(ua.DataTypeAttributes, ua.utils.Buffer(data))
assert dta.DisplayName == dta2.DisplayName
def test_browse():
data = b'\x01\x00\x12\x02\xe0S2\xb3\x8f\n\xd7\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x03\x00\x00\x00\x00#\x01@U\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00Objects\x02\x07\x00\x00\x00Objects\x01\x00\x00\x00@=\x00\x00\x00\x00\x00#\x01@V\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00Types\x02\x05\x00\x00\x00Types\x01\x00\x00\x00@=\x00\x00\x00\x00\x00#\x01@W\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00Views\x02\x05\x00\x00\x00Views\x01\x00\x00\x00@=\x00\x00\x00\x00\xff\xff\xff\xff'
#data = b'\x01\x00\x12\x020)E\x11"\n\xd7\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x03\x00\x00\x00\x00#\x01@U\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00Objects\x02\x07\x00\x00\x00Objects\x01\x00\x00\x00@=\x00\x00\x00\x00\x00#\x01@V\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00Types\x02\x05\x00\x00\x00Types\x01\x00\x00\x00@=\x00\x00\x00\x00\x00#\x01@W\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00Views\x02\x05\x00\x00\x00Views\x01\x00\x00\x00@=\x00\x00\x00\x00\xff\xff\xff\xff'
res = struct_from_binary(ua.BrowseResponse, ua.utils.Buffer(data))
def test_bname():
qn = ua.QualifiedName("TOTO", 2)
d = struct_to_binary(qn)
qn2 = struct_from_binary(ua.QualifiedName, ua.utils.Buffer(d))
assert qn == qn2
def test_expandedNodeId():
d = b"\x40\x55\x00\x00\x00\x00"
nid = nodeid_from_binary(ua.utils.Buffer(d))
assert isinstance(nid, ua.ExpandedNodeId)
assert nid.ServerIndex == 0
assert nid.Identifier == 85
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