def test_get_input_bool(self, answer, should_return): question = "Ehm, hello? ... is, is there anybody out there?" if answer == "m": with replace_stdin(io.StringIO(answer)): with pytest.raises(EOFError): _ = _get_input_bool(question) return 0 else: with replace_stdin(io.StringIO(answer)): returns = _get_input_bool(question) assert returns == should_return
def _save( filename: str, signal, overwrite: Optional[bool] = None, add_scan: Optional[bool] = None, **kwargs, ): """Write signal to a file in a supported format. This function is a modified version of :func:`hyperspy.io.save`. Parameters ---------- filename File path including name of new file. signal : EBSD or LazyEBSD Signal instance. overwrite Whether to overwrite file or not if it already exists. add_scan Whether to add the signal to an already existing h5ebsd file or not. If the file does not exist the signal is written to a new file. **kwargs : Keyword arguments passed to the writer. """ ext = os.path.splitext(filename)[1][1:] if ext == "": # Will write to kikuchipy's h5ebsd format ext = "h5" filename = filename + "." + ext writer = None for plugin in plugins: if ext.lower() in plugin.file_extensions and plugin.writes: writer = plugin break if writer is None: raise ValueError( f"'{ext}' does not correspond to any supported format. Supported " f"file extensions are: '{strlist2enumeration(default_write_ext)}'" ) else: sd = signal.axes_manager.signal_dimension nd = signal.axes_manager.navigation_dimension if writer.writes is not True and (sd, nd) not in writer.writes: # Get writers that can write this data writing_plugins = [] for plugin in plugins: if ( plugin.writes is True or plugin.writes is not False and (sd, nd) in plugin.writes ): writing_plugins.append(plugin) raise ValueError( "This file format cannot write this data. The following " f"formats can: {strlist2enumeration(writing_plugins)}" ) _ensure_directory(filename) is_file = os.path.isfile(filename) # Check if we are to add signal to an already existing h5ebsd file if writer.format_name == "h5ebsd" and overwrite is not True and is_file: if add_scan is None: q = "Add scan to '{}' (y/n)?\n".format(filename) add_scan = _get_input_bool(q) if add_scan: overwrite = True # So that the 2nd statement below triggers kwargs["add_scan"] = add_scan # Determine if signal is to be written to file or not if overwrite is None: write = overwrite_method(filename) # Ask what to do elif overwrite is True or (overwrite is False and not is_file): write = True # Write the file elif overwrite is False and is_file: write = False # Don't write the file else: raise ValueError( "overwrite parameter can only be None, True or False, and " f"not {overwrite}" ) # Finally, write file if write: writer.file_writer(filename, signal, **kwargs) directory, filename = os.path.split(os.path.abspath(filename)) signal.tmp_parameters.set_item("folder", directory) signal.tmp_parameters.set_item( "filename", os.path.splitext(filename)[0] ) signal.tmp_parameters.set_item("extension", ext)