Source code for scriptconfig.file_like

from os.path import exists


[docs] class FileLike(object): """ Allows input to be a path or a file object """ def __init__(self, path_or_file, mode='r'): if isinstance(path_or_file, str): _input_type = 'path' if not exists(path_or_file): raise ValueError('Path {} does not exist'.format(path_or_file)) else: if hasattr(path_or_file, 'readable'): _input_type = 'file' if not path_or_file.readable(): raise ValueError('file must be readable') else: raise TypeError('input must be a path or readable file') if 'r' not in mode: raise ValueError('file must be readable') self.mode = mode self._input_type = _input_type self._path_or_file = path_or_file def __enter__(self): if self._input_type == 'path': self._file = open(self._path_or_file, self.mode) else: self._file = self._path_or_file return self._file def __exit__(self, *args): if self._input_type == 'path': self._file.close()