docs: def request(self, method, url, **kwargs):
          """ Override, wraps Session.request in caching.
  
              Cache is only used if key_for_request returns a valid key
              and should_cache_response was true as well.
          """
          # short circuit if cache isn't configured
          if not self.cache_storage:
              resp = super(CachingSession, self).request(method, url, **kwargs)
              resp.fromcache = False
              return resp
  
          resp = None
          method = method.lower()
  
          request_key = self.key_for_request(method, url, **kwargs)
  
          if request_key and not self.cache_write_only:
              resp = self.cache_storage.get(request_key)
  
          if resp:
              resp.fromcache = True
          else:
              resp = super(CachingSession, self).request(method, url, **kwargs)
              # save to cache if request and response meet criteria
              if request_key and self.should_cache_response(resp):
                  self.cache_storage.set(request_key, resp)
              resp.fromcache = False
  
          return resp