def METHOD_NAME(self, ip, cached_ip_info):
    """
    Gets ASN info about IP, either cached, from our offline mmdb or from ip-api.com
    """
    # do we have asn cached for this range?
    if cached_asn := self.get_cached_asn(ip):
        self.update_ip_info(ip, cached_ip_info, cached_asn)
        return
    else:
        # now we have 2 options, either search for the ASN in our offline db, or online
        # either way we need to cache the asn of this ip's range so we don't search for ips in the same range
        # cache this range in our redis db
        if asn := self.cache_ip_range(ip):
            # range is cached and we managed to get the number and org of the given ip using whois
            # no need to search online or offline
            self.update_ip_info(ip, cached_ip_info, asn)
            return
        # we don't have it cached in our db, get it from geolite
        if asn := self.get_asn_info_from_geolite(ip):
            self.update_ip_info(ip, cached_ip_info, asn)
            return
        # can't find asn in mmdb or using whois library, try using ip-info
        if asn := self.get_asn_online(ip):
            # found it online
            self.update_ip_info(ip, cached_ip_info, asn)
            return