def match_tags(tags, include=None, exclude=None):
    """
    Returns true if ALL include are in tags, false if ANY exclude are in tags

    Args:
        tags (str, list): List of tags to be matched/checked
        include (str, list): List of tags that *must* all be in `tags`
        exclude (str, list): List of tags that *must not* be in `tags`
    """

    # Special case - return true if emmpty
    if include is None:
        return True

    if isinstance(tags, str):
        tags = {tags}
    tags = set(tags)

    if isinstance(include, str):
        include = {include}
    include = set(include)

    exclude = exclude or set()
    if isinstance(exclude, str):
        exclude = {exclude}
    exclude = set(exclude)
    return include.issubset(tags) and len(exclude & tags) == 0