async def METHOD_NAME(self, etype=None, emitting_node=ua.ObjectIds.Server, add_generates_event=True):
    node = None
    if isinstance(etype, event_objects.BaseEvent):
        self.event = etype
    elif isinstance(etype, Node):
        node = etype
    elif isinstance(etype, ua.NodeId):
        node = Node(self.isession, etype)
    else:
        node = Node(self.isession, ua.NodeId(etype))
    if node:
        self.event = await events.get_event_obj_from_type_node(node)
        if isinstance(self.event, event_objects.Condition):
            # Add ConditionId, which is not modelled as a component of the ConditionType
            self.event.add_property('NodeId', None, ua.VariantType.NodeId)
    if isinstance(emitting_node, Node):
        pass
    elif isinstance(emitting_node, ua.NodeId):
        emitting_node = Node(self.isession, emitting_node)
    else:
        emitting_node = Node(self.isession, ua.NodeId(emitting_node))
    self.event.emitting_node = emitting_node.nodeid
    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).read_browse_name()).Name
    await emitting_node.set_event_notifier([ua.EventNotifier.SubscribeToEvents])
    if add_generates_event:
        refs = []
        ref = ua.AddReferencesItem()
        ref.IsForward = True
        ref.ReferenceTypeId = ua.NodeId(ua.ObjectIds.GeneratesEvent)
        ref.SourceNodeId = emitting_node.nodeid
        ref.TargetNodeClass = ua.NodeClass.ObjectType
        ref.TargetNodeId = self.event.EventType
        refs.append(ref)
        results = await self.isession.add_references(refs)
        for result in results:
            result.check()