MCPcopy Create free account
hub / github.com/FreeOpcUa/python-opcua / EventsCodeGenerator

Class EventsCodeGenerator

schemas/generate_event_objects.py:10–122  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
9
10class EventsCodeGenerator(object):
11
12 def __init__(self, event_model, output):
13 self.output_file = output
14 self.event_model = event_model
15 self.indent = " "
16 self.iidx = 0 # indent index
17
18 def eventList(self):
19 tree = ET.parse(self.event_model)
20 root = tree.getroot()
21 for child in root:
22 if child.tag.endswith("UAObjectType"):
23 print (child.attrib)
24
25 def write(self, line):
26 if line:
27 line = self.indent * self.iidx + line
28 self.output_file.write(line + "\n")
29
30 def make_header(self, events: list):
31 self.write('"""')
32 self.write(f"Autogenerated code from xml spec Date: {datetime.datetime.now()}")
33 self.write('"""')
34 self.write("")
35 self.write("from opcua import ua")
36 self.write("from opcua.common.events import Event")
37 self.write("")
38 names = ", ".join(f'"{event.browseName}"' for event in events)
39 self.write(f"__all__ = [{names}]")
40 self.write("")
41
42 def addProperties(self, event):
43 for ref in event.references:
44 if ref.referenceType == "HasProperty":
45 self.write("self.add_property('{0}', {1}, {2})".format(
46 ref.refBrowseName, self.getPropertyValue(ref),
47 self.getPropertyDataType(ref)
48 ))
49
50 def getPropertyValue(self, reference):
51 if reference.refBrowseName == "SourceNode":
52 return "sourcenode"
53 elif reference.refBrowseName == "Severity":
54 return "severity"
55 elif reference.refBrowseName == "Status":
56 return "False"
57 elif reference.refBrowseName == "Message":
58 return "ua.LocalizedText(message)"
59 elif reference.refDataType == "NodeId":
60 return "ua.NodeId(ua.ObjectIds.{0})".format(
61 str(obIds.ObjectIdNames[int(str(reference.refId).split("=")[1])]).split("_")[0])
62 else:
63 return "None"
64
65 def getPropertyDataType(self, reference):
66 if str(reference.refBrowseName) in ("Time", "ReceiveTime"):
67 return "ua.VariantType.DateTime"

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected