(tables: List[agate.Table])
return agate.Table(rows, column_names, column_types, _is_fork=True)
This is similar to agate.Table.merge, but it handles rows of all 'null'
    values more gracefully during merges.
This is similar to agate.Table.merge, but it handles rows of all 'null'
    values more gracefully during merges.
This is similar to agate . Table . merge but it handles rows of all null values more gracefully during merges .
def merge_tables(tables: List[agate.Table]) -> agate.Table:
    """This is similar to agate.Table.merge, but it handles rows of all 'null'
    values more gracefully during merges.
    """
    new_columns = _merged_column_types(tables)
    column_names = tuple(new_columns.keys())
    column_types = tuple(new_columns.values())

    rows: List[agate.Row] = []
    for table in tables:
        if (
            table.column_names == column_names and
            table.column_types == column_types
        ):
            rows.extend(table.rows)
        else:
            for row in table.rows:
                data = [row.get(name, None) for name in column_names]
                rows.append(agate.Row(data, column_names))
    # _is_fork to tell agate that we already made things into `Row`s.
    return agate.Table(rows, column_names, column_types, _is_fork=True)
def merge_tables ( tables : List [ agate . Table ] ) -> agate . Table : new_columns = _merged_column_types ( tables ) column_names = tuple ( new_columns . keys ( ) ) column_types = tuple ( new_columns . values ( ) ) rows : List [ agate . Row ] = [ ] for table in tables : if ( table . column_names == column_names and table . column_types == column_types ) : rows . extend ( table . rows ) else : for row in table . rows : data = [ row . get ( name , None ) for name in column_names ] rows . append ( agate . Row ( data , column_names ) ) # _is_fork to tell agate that we already made things into `Row`s. return agate . Table ( rows , column_names , column_types , _is_fork = True )