docs: def from_taxtable(cls, taxtable_fp):
          """
          Generate a node from an open handle to a taxtable, as generated by
          ``taxit taxtable``
          """
          r = csv.reader(taxtable_fp)
          headers = next(r)
          rows = (collections.OrderedDict(list(zip(headers, i))) for i in r)
  
          row = next(rows)
          root = cls(rank=row['rank'], tax_id=row[
                     'tax_id'], name=row['tax_name'])
          path_root = headers.index('root')
          root.ranks = headers[path_root:]
          for row in rows:
              rank, tax_id, name = [
                  row[i] for i in ('rank', 'tax_id', 'tax_name')]
              path = [_f for _f in list(row.values())[path_root:] if _f]
              parent = root.path(path[:-1])
              parent.add_child(cls(rank, tax_id, name=name))
  
          return root