'**Arguments:**
name            The name of this specific node instance. It can be any
string, but must be unique within a flowchart. Usually,
we simply let the flowchart decide on a name when calling
Flowchart.addNode(...)
terminals       Dict-of-dicts specifying the terminals present on this Node.
Terminal specifications look like::
\'inputTerminalName\': {\'io\': \'in\'}
\'outputTerminalName\': {\'io\': \'out\'}
There are a number of optional parameters for terminals:
multi, pos, renamable, removable, multiable, bypass. See
the Terminal class for more information.
allowAddInput   bool; whether the user is allowed to add inputs by the
context menu.
allowAddOutput  bool; whether the user is allowed to add outputs by the
context menu.
allowRemove     bool; whether the user is allowed to remove this node by the
context menu.'

def __init__(self, name, terminals=None, allowAddInput=False, allowAddOutput=False, allowRemove=True):

    QtCore.QObject.__init__(self)
    self._name = name
    self._bypass = False
    self.bypassButton = None
    self._graphicsItem = None
    self.terminals = OrderedDict()
    self._inputs = OrderedDict()
    self._outputs = OrderedDict()
    self._allowAddInput = allowAddInput
    self._allowAddOutput = allowAddOutput
    self._allowRemove = allowRemove
    self.exception = None
    if (terminals is None):
        return
    for (name, opts) in terminals.items():
        self.addTerminal(name, **opts)
