docs: def add_node(self, tax_id, parent_id, rank, names, source_name, children=None,
                   is_valid=True, execute=True, **ignored):
          """Add a node to the taxonomy.
  
          ``source_name`` is added to table "source" if necessary.
  
          """
  
          if ignored:
              log.info('some arguments were ignored: {} '.format(str(ignored)))
  
          children = children or []
          self.verify_rank_integrity(tax_id, rank, parent_id, children)
          source_id, __ = self.add_source(source_name)
          assert isinstance(is_valid, bool)
  
          statements = []
  
          # add node
          statements.append(
              self.nodes.insert().values(
                  tax_id=tax_id,
                  parent_id=parent_id,
                  rank=rank,
                  source_id=source_id))
  
          # add names. Since this is a new node, at least one name must
          # be provided; if only one is provided, it is the primary
          # name. If more than one is primary, an error will be raised
          # from add_names()
          if len(names) == 1:
              names[0]['is_primary'] = True
          else:
              primary_names = [n['tax_name'] for n in names if n.get('is_primary')]
              if len(primary_names) != 1:
                  raise ValueError(
                      '`is_primary` must be True for exactly one name in `names`')
  
          for namedict in names:
              namedict['source_id'] = source_id
              if 'source_name' in namedict:
                  del namedict['source_name']
  
          statements.extend(self.add_names(tax_id, names, execute=False))
  
          # add children and update source_id
          for child in children:
              statements.append(self.nodes.update(
                  whereclause=self.nodes.c.tax_id == child,
                  values={'parent_id': tax_id, 'source_id': source_id}))
  
          if execute:
              self.execute(statements)
          else:
              return statements