'Takes either a title/author combo or an Overdrive ID.  One of these
two must be passed to this function.'

def to_ovrdrv_data(self, br, log, title=None, author=None, ovrdrv_id=None):

    if (ovrdrv_id is not None):
        with cache_lock:
            ans = ovrdrv_data_cache.get(ovrdrv_id, None)
        if ans:
            return ans
        elif (ans is False):
            return None
        else:
            ovrdrv_data = self.find_ovrdrv_data(br, log, title, author, ovrdrv_id)
    else:
        try:
            ovrdrv_data = self.find_ovrdrv_data(br, log, title, author, ovrdrv_id)
        except:
            import traceback
            traceback.print_exc()
            ovrdrv_data = None
    with cache_lock:
        ovrdrv_data_cache[ovrdrv_id] = (ovrdrv_data if ovrdrv_data else False)
    return (ovrdrv_data if ovrdrv_data else False)
