def _get_canvases(toc_entry: TocEntry, manifest: Manifest) -> List[str]:
    """Obtain list of canvas identifiers for a given TOC entry.

    :param toc_entry:       TOC entry to get canvases for
    :param manifest:        Manifest with canvases
    :returns:               All canvas ids for the given TOC entry
    """
    canvases = []
    for phys_id in toc_entry.physical_ids:
        canvas = next((c for c in manifest.sequences[0].canvases
                       if c.id.endswith(f'{phys_id}.json')), None)
        if canvas is None:
            logger.warning(f'Could not find a matching canvas for {phys_id}')
            continue
        canvases.append(canvas)
    if toc_entry.children:
        canvases.extend(chain.from_iterable(
            _get_canvases(child, manifest)
            for child in toc_entry.children))
    return canvases