def _shortcut_open( uri, mode, compression, buffering=-1, encoding=None, errors=None, newline=None, ): """Try to open the URI using the standard library io.open function. This can be much faster than the alternative of opening in binary mode and then decoding. This is only possible under the following conditions: 1. Opening a local file; and 2. Compression is disabled If it is not possible to use the built-in open for the specified URI, returns None. :param str uri: A string indicating what to open. :param str mode: The mode to pass to the open function. :param str compression: The compression type selected. :returns: The opened file :rtype: file """ if not isinstance(uri, str): return None scheme = _sniff_scheme(uri) if scheme not in (transport.NO_SCHEME, so_file.SCHEME): return None local_path = so_file.extract_local_path(uri) if compression == so_compression.INFER_FROM_EXTENSION: _, extension = P.splitext(local_path) if extension in so_compression.get_supported_extensions(): return None elif compression != so_compression.NO_COMPRESSION: return None open_kwargs = {} if encoding is not None: open_kwargs['encoding'] = encoding mode = mode.replace('b', '') if newline is not None: open_kwargs['newline'] = newline # # binary mode of the builtin/stdlib open function doesn't take an errors argument # if errors and 'b' not in mode: open_kwargs['errors'] = errors return _builtin_open(local_path, mode, buffering=buffering, **open_kwargs)
def _shortcut_open( uri, mode, ignore_ext=False, buffering=-1, encoding=None, errors=None, ): """Try to open the URI using the standard library io.open function. This can be much faster than the alternative of opening in binary mode and then decoding. This is only possible under the following conditions: 1. Opening a local file 2. Ignore extension is set to True If it is not possible to use the built-in open for the specified URI, returns None. :param str uri: A string indicating what to open. :param str mode: The mode to pass to the open function. :param dict kw: :returns: The opened file :rtype: file """ if not isinstance(uri, str): return None scheme = _sniff_scheme(uri) if scheme not in (transport.NO_SCHEME, so_file.SCHEME): return None local_path = so_file.extract_local_path(uri) _, extension = P.splitext(local_path) if extension in compression.get_supported_extensions() and not ignore_ext: return None open_kwargs = {} if encoding is not None: open_kwargs['encoding'] = encoding mode = mode.replace('b', '') # # binary mode of the builtin/stdlib open function doesn't take an errors argument # if errors and 'b' not in mode: open_kwargs['errors'] = errors return _builtin_open(local_path, mode, buffering=buffering, **open_kwargs)