code: def time_cache(time_add_setting):
      
      def _temp(key_func):
          dct = {}
          _time_caches.append(dct)
  
          def wrapper(optional_callable, *args, **kwargs):
              key = key_func(*args, **kwargs)
              value = None
              if key in dct:
                  expiry, value = dct[key]
                  if expiry > time.time():
                      return value
              value = optional_callable()
              time_add = getattr(settings, time_add_setting)
              if key is not None:
                  dct[key] = time.time() + time_add, value
              return value
          return wrapper
      return _temp
docs: This decorator works as follows: Call it with a setting and after that
      use the function with a callable that returns the key.
      But: This function is only called if the key is not available. After a
      certain amount of time (`time_add_setting`) the cache is invalid.