def dropEvent(self, event):
        if (self.controller and (
                isinstance(event.source(), QModuleTreeWidget) or
                isinstance(event.source(), QDragVariableLabel))):
            data = event.mimeData()
            if hasattr(data, 'items') and not self.read_only_mode and \
                self.controller.current_pipeline == self.current_pipeline:
                assert len(data.items) == 1
                self.add_module_event(event, data)
                event.accept()
                return
            elif hasattr(data, 'variableData'):
                if self._var_selected_port is not None:
                    # Unhighlight selected port and get var data
                    self._var_selected_port.setSelected(False)
                    output_portspec = data.variableData[0]
                    var_uuid = data.variableData[1]
                    var_name = data.variableData[2]
                    descriptor = output_portspec.descriptors()[0]
                    input_module = self._var_selected_port.parentItem().module
                    #input_portspec = self._var_selected_port.port
                    input_port = self._var_selected_port.port.name
                    m_pos_x = event.scenePos().x()
                    m_pos_y = -event.scenePos().y()
                    
                    (new_conn, new_module) = \
                        self.controller.connect_vistrail_var(descriptor,
                                                             var_uuid,
                                                             input_module,
                                                             input_port,
                                                             m_pos_x, 
                                                             m_pos_y)
                    if new_module is not None:
                        self.addModule(new_module)
                    if new_conn is not None:
                        self.addConnection(new_conn)
                    else:
                        msg = 'Vistrail Variable "%s" is already connected' \
                            ' to this port.' % var_name
                        QtGui.QMessageBox.information(None, 
                                                      "Already Connected",
                                                      msg)
                    event.accept()
                    return
        # Ignore if not accepted and returned by this point
        event.ignore()
dropEvent(event: QDragMoveEvent) -> None
dataset/ETHPy150Open VisTrails/VisTrails/vistrails/gui/pipeline_view.py/QPipelineScene.dropEvent