@classmethod
def _is_exposed_column(cls, field):
    """
            Check field is exposed, i.e.
            - not exposed columns
            - column referencing not exposed columns
            - exposure is specified explicitly in "exposed" info dict
            - exposure default to false iff column is primary key
            :return True iff column is exposed
        """
    path = field.split('.')
    cols = cls._get_column(path)
    if not isinstance(cols, list):
        cols = [cols]
    for col in cols:
        for fk in getattr(col, 'foreign_keys', set()):
            is_primary_key = fk.column.primary_key
            fk_table = fk.column.table.name
            assert fk_table.quote is None
            if not fk.column.info.get('exposed', not is_primary_key):
                return False
        if not col.info.get('exposed', not col.primary_key):
            assert col.class_.__table__.name.quote is None
            return False
    return True
