Search code examples
pythondiskcache

How to exclude parameters when caching function calls with DiskCache and memoize?


I am using Python's DiskCache and the memoize decorator to cache function calls to a database of static data.


from diskcache import Cache
cache = Cache("database_cache)

@cache.memoize()
def fetch_document(row_id: int, user: str, password: str):
    ...

I don't want the user and password be part of the cache key.

How can I exclude parameters from the key generation?


Solution

  • Documentation for memoize doesn't show option to exclude parameters.

    You may try to write own decorator - using source code.

    Or use cache on your own inside fetch_document - something like this

    def fetch_document(row_id: int, user: str, password: str):
        if row_id in cache:
             return cache[row_id]
    
        # ... code ...
                  
        # result = ...
    
        cache[row_id] = result
    
        return result              
    

    EDIT:

    OR create cached version of your function - like this

    def cached_fetch_document(row_id: int, user: str, password: str):
        if row_id in cache:
             return cache[row_id]
    
        result = fetch_document(row_id: int, user: str, password: str)
    
        cache[row_id] = result
    
        return result              
    

    and later you can decide if you want to use cached_fetch_document in place of fetch_document