code: def _get_partial_object(self, bucket_name, object_name,
                              offset=0, length=0, request_headers=None, sse=None):
          
          is_valid_sse_c_object(sse=sse)
          is_valid_bucket_name(bucket_name)
          is_non_empty_string(object_name)
  
          headers = {}
          if request_headers:
              headers = request_headers
  
          if offset != 0 or length != 0:
              request_range = '{}-{}'.format(
                  offset, "" if length == 0 else offset + length - 1
              )
              headers['Range'] = 'bytes=' + request_range
  
          if sse:
              headers.update(sse.marshal())
  
          return self._url_open('GET',
                                 bucket_name=bucket_name,
                                 object_name=object_name,
                                 headers=headers,
                                 preload_content=False)
docs: Retrieves an object from a bucket.
  
          Optionally takes an offset and length of data to retrieve.
  
          It returns a response object whose content is not
          pre-loaded. This means that the connection associated with the
          response needs to be released (for efficient re-use) after
          usage with `response.release_conn()`. Otherwise, the
          connection will linger until the object is garbage collected,
          when the connection is simply closed and not re-used.
  
          Examples:
              partial_object = minio.get_partial_object('foo', 'bar', 2, 4)
  
          :param bucket_name: Bucket to retrieve object from
          :param object_name: Name of object to retrieve
          :param offset: Optional offset to retrieve bytes from.
             Must be >= 0.
          :param length: Optional number of bytes to retrieve.
             Must be > 0.
          :param request_headers: Any additional metadata to be uploaded along
              with request.
          :return: :class:`urllib3.response.HTTPResponse` object.