Source code for crikit.io.lazy5.utils

""" Utility functions """
import os as _os

import h5py as _h5py
import numpy as _np

from .config import DefaultConfig
_h5py.get_config().complex_names = DefaultConfig().complex_names

__all__ = ['FidOrFile', 'hdf_is_open', 'fullpath']

[docs]class FidOrFile: """ Class for opening an HDF5 file and returning a file ID (fid) or if passed and already open fid, passing it along (pass-thru). Primarily for enabling functions and methods to operate on open and closed files. Parameters ---------- file : str or h5py.File Filename or File-object for open HDF5 file mode : str If opening a file, open with mode. Available: r,r+,w,w-,x,a Attributes ---------- is_fid : bool Was the input file actually an fid. fid : h5py.File object File ID """ def __init__(self, file=None, mode='r'): self.is_fid = None self.fid = None if file is not None: self.return_fid_from_file(file, mode=mode)
[docs] def return_fid_from_file(self, file, mode='r'): """ Return an open fid (h5py.File). If provided a string, open file, else pass-thru given fid. Parameters ---------- file : str or h5py.File Filename or File-object for open HDF5 file mode : str If opening a file, open with mode. Available: r,r+,w,w-,x,a Returns ------- fid : h5py.File object File ID """ self.is_fid = isinstance(file, _h5py.File) if not self.is_fid: self.fid = _h5py.File(file, mode=mode) else: self.fid = file return self.fid
[docs] def close_if_file_not_fid(self): """ Close the file if originally a filename (not a fid) was passed """ if not self.is_fid: return self.fid.close() else: return None
[docs]def hdf_is_open(fid): """ Is an HDF file open via fid """ # ! New h5py v 2.9.*: id instead of fid try: status = fid.id.valid except AttributeError: status = fid.fid.valid if status == 0: return False elif status == 1: return True else: return None
[docs]def fullpath(filename, pth=None): """ Return a full path by joining a pth and filename """ if not pth: return filename else: return _os.path.join(pth, filename)