def get_authors_text(csl_item, max_length=100):
    """
    Return string of authors like:
    Ching, Himmelstein, Beaulieu-Jones, Kalinin, Do, Way, Ferrero, Agapow, Zietz, Hoffman, Xie, Rosen, et al

    "et al" is inserted when adding another name would cause
    authors_text to exceed max_length.
    """
    authors = list()
    keys = [
        'author',
        'collection-editor',
        'composer',
        'container-author',
        'director',
        'editor',
        'editorial-director',
        'translator',
    ]
    for key in keys:
        if key in csl_item:
            authors = csl_item[key]
            break
    authors_text = ''
    for author in authors:
        try:
            # name = f"{author['given']} {author['family']}"]
            name = author['family']
        except KeyError:
            if 'literal' in author:
                name = author['literal']
            else:
                continue
        if authors_text:
            authors_text += ', '
        if len(name) + len(authors_text) > max_length:
            authors_text += 'et al'
            break
        authors_text += name
    return authors_text