class_docstr: Wraps an `HTTPMessageDelegate` to decode ``Content-Encoding: gzip``.
      
class_docstr_tok: ["Wraps","an","`","HTTPMessageDelegate","`","to","decode","``","Content-Encoding",":","gzip","``","."]
code: def finish(self):
      if self._decompressor is not None:
          tail = self._decompressor.flush()
          if tail:
              # I believe the tail will always be empty (i.e.
              # decompress will return all it can).  The purpose
              # of the flush call is to detect errors such
              # as truncated input.  But in case it ever returns
              # anything, treat it as an extra chunk
              self._delegate.data_received(tail)
      return self._delegate.finish()
  
imports: from __future__ import absolute_import, division, print_function
  import re
  from tornado.concurrent import Future
  from tornado.escape import native_str, utf8
  from tornado import gen
  from tornado import httputil
  from tornado import iostream
  from tornado.log import gen_log, app_log
  from tornado import stack_context
  from tornado.util import GzipDecompressor, PY3
label_desc: Use image node_id 4 for calling the _GzipMessageDelegate obj's underlying member method code with example usage: obj.finish() and returns: self