def should_run_crawl(
    force_crawl: bool, skip_crawl: bool, searching_path: bool, crawled_recently: bool
) -> bool:
    """
    Check whether to run the crawl.

    Always crawl if force_crawl is True.
    Otherwise, never crawl if skip_crawl is True.

    Assuming neither of the above are true, then crawl if searching_path is True or crawled_recently is False.

    :param force_crawl: Always crawl if True.
    :param skip_crawl: Never crawl if True, unless force_crawl is also True.
    :param searching_path: If the above are both false, then crawl if we're searching a path.
    :param crawled_recently: If all the above are False, then crawl if this is also False, as we
        haven't crawled this path recently.
    :return: True if we should crawl.
    """
    if force_crawl:
        return True
    elif skip_crawl:
        return False
    elif searching_path:
        return True
    elif not crawled_recently:
        return True
    return False