| 8 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
| 9 | |
| 10 | class 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" |
no outgoing calls
no test coverage detected