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
Generate a node from an open handle to a taxtable, as generated by
        ``taxit taxtable``