sportsref/decorators.py
def cache(func):
    """Caches the HTML returned by the specified function `func`. Caches it in
    the user cache determined by the appdirs package.
    """

    CACHE_DIR = appdirs.user_cache_dir('sportsref', getpass.getuser())
    if not os.path.isdir(CACHE_DIR):
        os.makedirs(CACHE_DIR)

    @funcutils.wraps(func)
    def wrapper(url):
        # hash based on the URL
        file_hash = hashlib.md5()
        encoded_url = url.encode(errors='replace')
        file_hash.update(encoded_url)
        file_hash = file_hash.hexdigest()
        filename = '{}/{}'.format(CACHE_DIR, file_hash)

        sport_id = None
        for a_base_url, a_sport_id in sportsref.SITE_ABBREV.items():
            if url.startswith(a_base_url):
                sport_id = a_sport_id
                break
        else:
            print('No sport ID found for {}, not able to check cache'.format(url))

        # check whether cache is valid or stale
        file_exists = os.path.isfile(filename)
        if sport_id and file_exists:
            cur_time = int(time.time())
            mod_time = int(os.path.getmtime(filename))
            days_since_mod = datetime.timedelta(seconds=(cur_time - mod_time)).days
            days_cache_valid = globals()['_days_valid_{}'.format(sport_id)](url)
            cache_is_valid = days_since_mod < days_cache_valid
        else:
            cache_is_valid = False

        # if file found and cache is valid, read from file
        allow_caching = sportsref.get_option('cache')
        if file_exists and cache_is_valid and allow_caching:
            with codecs.open(filename, 'r', encoding='utf-8', errors='replace') as f:
                text = f.read()
        # otherwise, execute function and cache results
        else:
            text = func(url)
            with codecs.open(filename, 'w+', encoding='utf-8') as f:
                f.write(text)
        return text

    return wrapper
def cache(func):
    CACHE_DIR = appdirs.user_cache_dir('sportsref', getpass.getuser())
    if not os.path.isdir(CACHE_DIR):
        os.makedirs(CACHE_DIR)

    @funcutils.wraps(func)
    def wrapper(url):
        # hash based on the URL
        file_hash = hashlib.md5()
        encoded_url = url.encode(errors='replace')
        file_hash.update(encoded_url)
        file_hash = file_hash.hexdigest()
        filename = '{}/{}'.format(CACHE_DIR, file_hash)

        sport_id = None
        for a_base_url, a_sport_id in sportsref.SITE_ABBREV.items():
            if url.startswith(a_base_url):
                sport_id = a_sport_id
                break
        else:
            print('No sport ID found for {}, not able to check cache'.format(url))

        # check whether cache is valid or stale
        file_exists = os.path.isfile(filename)
        if sport_id and file_exists:
            cur_time = int(time.time())
            mod_time = int(os.path.getmtime(filename))
            days_since_mod = datetime.timedelta(seconds=(cur_time - mod_time)).days
            days_cache_valid = globals()['_days_valid_{}'.format(sport_id)](url)
            cache_is_valid = days_since_mod < days_cache_valid
        else:
            cache_is_valid = False

        # if file found and cache is valid, read from file
        allow_caching = sportsref.get_option('cache')
        if file_exists and cache_is_valid and allow_caching:
            with codecs.open(filename, 'r', encoding='utf-8', errors='replace') as f:
                text = f.read()
        # otherwise, execute function and cache results
        else:
            text = func(url)
            with codecs.open(filename, 'w+', encoding='utf-8') as f:
                f.write(text)
        return text

    return wrapper
def cache ( func ) : CACHE_DIR = appdirs . user_cache_dir ( 'sportsref' , getpass . getuser ( ) ) if not os . path . isdir ( CACHE_DIR ) : os . makedirs ( CACHE_DIR ) @ funcutils . wraps ( func ) def wrapper ( url ) : # hash based on the URL file_hash = hashlib . md5 ( ) encoded_url = url . encode ( errors = 'replace' ) file_hash . update ( encoded_url ) file_hash = file_hash . hexdigest ( ) filename = '{}/{}' . format ( CACHE_DIR , file_hash ) sport_id = None for a_base_url , a_sport_id in sportsref . SITE_ABBREV . items ( ) : if url . startswith ( a_base_url ) : sport_id = a_sport_id break else : print ( 'No sport ID found for {}, not able to check cache' . format ( url ) ) # check whether cache is valid or stale file_exists = os . path . isfile ( filename ) if sport_id and file_exists : cur_time = int ( time . time ( ) ) mod_time = int ( os . path . getmtime ( filename ) ) days_since_mod = datetime . timedelta ( seconds = ( cur_time - mod_time ) ) . days days_cache_valid = globals ( ) [ '_days_valid_{}' . format ( sport_id ) ] ( url ) cache_is_valid = days_since_mod < days_cache_valid else : cache_is_valid = False # if file found and cache is valid, read from file allow_caching = sportsref . get_option ( 'cache' ) if file_exists and cache_is_valid and allow_caching : with codecs . open ( filename , 'r' , encoding = 'utf-8' , errors = 'replace' ) as f : text = f . read ( ) # otherwise, execute function and cache results else : text = func ( url ) with codecs . open ( filename , 'w+' , encoding = 'utf-8' ) as f : f . write ( text ) return text return wrapper
Caches the HTML returned by the specified function `func`. Caches it in
    the user cache determined by the appdirs package.
Caches the HTML returned by the specified function func . Caches it in the user cache determined by the appdirs package .