/usr/lib/python3/dist-packages/opcua/common/methods.py is in python3-opcua 0.90.3-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | """
High level method related functions
"""
from opcua import ua
from opcua.common import node
def call_method(parent, methodid, *args):
"""
Call an OPC-UA method. methodid is browse name of child method or the
nodeid of method as a NodeId object
arguments are variants or python object convertible to variants.
which may be of different types
returns a list of variants which are output of the method
"""
if isinstance(methodid, str):
methodid = parent.get_child(methodid).nodeid
elif isinstance(methodid, node.Node):
methodid = methodid.nodeid
arguments = []
for arg in args:
if not isinstance(arg, ua.Variant):
arg = ua.Variant(arg)
arguments.append(arg)
result = _call_method(parent.server, parent.nodeid, methodid, arguments)
if len(result.OutputArguments) == 0:
return None
elif len(result.OutputArguments) == 1:
return result.OutputArguments[0].Value
else:
return [var.Value for var in result.OutputArguments]
def _call_method(server, parentnodeid, methodid, arguments):
request = ua.CallMethodRequest()
request.ObjectId = parentnodeid
request.MethodId = methodid
request.InputArguments = arguments
methodstocall = [request]
results = server.call(methodstocall)
res = results[0]
res.StatusCode.check()
return res
def uamethod(func):
"""
Method decorator to automatically convert
arguments and output to and from variants
"""
def wrapper(parent, *args):
if isinstance(parent, ua.NodeId):
result = func(parent, *[arg.Value for arg in args])
else:
self = parent
parent = args[0]
args = args[1:]
result = func(self, parent, *[arg.Value for arg in args])
return to_variant(result)
return wrapper
def to_variant(*args):
uaargs = []
for arg in args:
uaargs.append(ua.Variant(arg))
return uaargs
|