parameters: (self, amt=None, decode_content=None, cache_content=False)
return_statement: return data
docstring: Similar to :meth:`httplib.HTTPResponse.read`, but with two additional
          parameters: ``decode_content`` and ``cache_content``.
  
          :param amt:
              How much of the content to read. If specified, caching is skipped
              because it doesn't make sense to cache partial content as the full
              response.
  
          :param decode_content:
              If True, will attempt to decode the body based on the
              'content-encoding' header.
  
          :param cache_content:
              If True, will save the returned data such that the same result is
              returned despite of the state of the underlying file object. This
              is useful if you want the ``.data`` property to continue working
              after having ``.read()`` the file object. (Overridden if ``amt`` is
              set.)
docstring_summary: Similar to :meth:`httplib.HTTPResponse.read`, but with two additional
          parameters: ``decode_content`` and ``cache_content``.
docstring_tokens: Similar to : meth : httplib . HTTPResponse . read but with two additional parameters : decode_content and cache_content .
function: def read(self, amt=None, decode_content=None, cache_content=False):
          """
          Similar to :meth:`httplib.HTTPResponse.read`, but with two additional
          parameters: ``decode_content`` and ``cache_content``.
  
          :param amt:
              How much of the content to read. If specified, caching is skipped
              because it doesn't make sense to cache partial content as the full
              response.
  
          :param decode_content:
              If True, will attempt to decode the body based on the
              'content-encoding' header.
  
          :param cache_content:
              If True, will save the returned data such that the same result is
              returned despite of the state of the underlying file object. This
              is useful if you want the ``.data`` property to continue working
              after having ``.read()`` the file object. (Overridden if ``amt`` is
              set.)
          """
          self._init_decoder()
          if decode_content is None:
              decode_content = self.decode_content
  
          if self._fp is None:
              return
  
          flush_decoder = False
          fp_closed = getattr(self._fp, "closed", False)
  
          with self._error_catcher():
              if amt is None:
                  # cStringIO doesn't like amt=None
                  data = self._fp.read() if not fp_closed else b""
                  flush_decoder = True
              else:
                  cache_content = False
                  data = self._fp.read(amt) if not fp_closed else b""
                  if (
                      amt != 0 and not data
                  ):  # Platform-specific: Buggy versions of Python.
                      # Close the connection when no data is returned
                      #
                      # This is redundant to what httplib/http.client _should_
                      # already do.  However, versions of python released before
                      # December 15, 2012 (http://bugs.python.org/issue16298) do
                      # not properly close the connection in all cases. There is
                      # no harm in redundantly calling close.
                      self._fp.close()
                      flush_decoder = True
                      if self.enforce_content_length and self.length_remaining not in (
                          0,
                          None,
                      ):
                          # This is an edge case that httplib failed to cover due
                          # to concerns of backward compatibility. We're
                          # addressing it here to make sure IncompleteRead is
                          # raised during streaming, so all calls with incorrect
                          # Content-Length are caught.
                          raise IncompleteRead(self._fp_bytes_read, self.length_remaining)
  
          if data:
              self._fp_bytes_read += len(data)
              if self.length_remaining is not None:
                  self.length_remaining -= len(data)
  
              data = self._decode(data, decode_content, flush_decoder)
  
              if cache_content:
                  self._body = data
  
          return data
function_tokens: def read ( self , amt = None , decode_content = None , cache_content = False ) : self . _init_decoder ( ) if decode_content is None : decode_content = self . decode_content if self . _fp is None : return flush_decoder = False fp_closed = getattr ( self . _fp , "closed" , False ) with self . _error_catcher ( ) : if amt is None : # cStringIO doesn't like amt=None data = self . _fp . read ( ) if not fp_closed else b"" flush_decoder = True else : cache_content = False data = self . _fp . read ( amt ) if not fp_closed else b"" if ( amt != 0 and not data ) : # Platform-specific: Buggy versions of Python. # Close the connection when no data is returned # # This is redundant to what httplib/http.client _should_ # already do.  However, versions of python released before # December 15, 2012 (http://bugs.python.org/issue16298) do # not properly close the connection in all cases. There is # no harm in redundantly calling close. self . _fp . close ( ) flush_decoder = True if self . enforce_content_length and self . length_remaining not in ( 0 , None , ) : # This is an edge case that httplib failed to cover due # to concerns of backward compatibility. We're # addressing it here to make sure IncompleteRead is # raised during streaming, so all calls with incorrect # Content-Length are caught. raise IncompleteRead ( self . _fp_bytes_read , self . length_remaining ) if data : self . _fp_bytes_read += len ( data ) if self . length_remaining is not None : self . length_remaining -= len ( data ) data = self . _decode ( data , decode_content , flush_decoder ) if cache_content : self . _body = data return data