docs: def get(self, orig_key):
          """Get cache entry for key, or return None."""
          resp = requests.Response()
  
          key = self._clean_key(orig_key)
          path = os.path.join(self.cache_dir, key)
  
          try:
              with open(path, 'rb') as f:
                  # read lines one at a time
                  while True:
                      line = f.readline().decode('utf8').strip('\r\n')
                      # set headers
  
                      if self.check_last_modified and re.search("last-modified", line, flags=re.I):
                          # line contains last modified header
                          head_resp = requests.head(orig_key)
  
                          try:
                              new_lm = head_resp.headers['last-modified']
                              old_lm = line[string.find(line, ':') + 1:].strip()
                              if old_lm != new_lm:
                                  # last modified timestamps don't match, need to download again
                                  return None
                          except KeyError:
                              # no last modified header present, so redownload
                              return None
  
                      header = self._header_re.match(line)
                      if header:
                          resp.headers[header.group(1)] = header.group(2)
                      else:
                          break
                  # everything left is the real content
                  resp._content = f.read()
  
              # status & encoding will be in headers, but are faked
              # need to split spaces out of status to get code (e.g. '200 OK')
              resp.status_code = int(resp.headers.pop('status').split(' ')[0])
              resp.encoding = resp.headers.pop('encoding')
              resp.url = resp.headers.get('content-location', orig_key)
              # TODO: resp.request = request
              return resp
          except IOError:
              return None