def __init__(self, handle, **options):
super(ArchiveReadFS, self).__init__()<EOL>if isinstance(handle, six.binary_type):<EOL><INDENT>handle = fsdecode(fspath(handle))<EOL><DEDENT>if isinstance(handle, six.text_type):<EOL><INDENT>_path = os.path.expanduser(os.path.expandvars(handle))<EOL>_path = os.path.normpath(os.path.abspath(_path))<EOL>if os.path.exists(_path) and os.access(_path, os.R_OK):<EOL><INDENT>self._close_handle = True<EOL>self._handle = open(_path, '<STR_LIT:rb>')<EOL><DEDENT><DEDENT>elif hasattr(handle, '<STR_LIT>'):<EOL><INDENT>if handle.readable() and handle.seekable():<EOL><INDENT>self._close_handle = options.get('<STR_LIT>', True)<EOL>self._handle = handle<EOL><DEDENT><DEDENT>else:<EOL><INDENT>raise errors.CreateFailed("<STR_LIT>".format(handle))<EOL><DEDENT>
Create a new archive reader filesystem.

        Parameters:
            handle (`io.IOBase` or `str`): a filename or a readable
                file-like object storing the archive to read

        Keyword Arguments:
            close_handle (`boolean`): if ``True``, close the handle
                when the filesystem is closed. **[default: True]**