Too much extraneous whitespace starting here, I think. Would suggest something like this:

            if amt is None:
                # cStringIO doesn't like amt=None
                data = self._fp.read()
                flush_decoder = True
            else:
                cache_content = False
                data = self._fp.read(amt)

                if amt != 0 and not data:  # Platform-specific: Buggy versions of Python.