# sasdata.dataloader.loader module

File handler to support different file extensions. Uses reflectometer registry utility. The default readers are found in the ‘readers’ sub-module and registered by default at initialization time. To add a new default reader, one must register it in the register_readers method found in readers/__init__.py. A utility method (find_plugins) is available to inspect a directory (for instance, a user plug-in directory) and look for new readers/writers.

class sasdata.dataloader.loader.Loader

  Bases: `object`

  Utility class to use the Registry as a singleton.

  associate_file_reader(ext: str, loader) → bool

    Append a reader object to readers :param ext: file extension [string] :param module: reader object

  associate_file_type(ext: str, module: ModuleType) → bool

    Look into a module to find whether it contains a Reader class. If so, append it to readers and (potentially) to the list of writers for the given extension :param ext: file extension [string] :param module: module object

  find_plugins(directory: str) → int

    Find plugins in a given directory :param directory: directory to look into to find new readers/writers

  get_wildcards()

    Return the list of wildcards

  load(file_path_list: List[str | Path] | str | Path, format: List[str] | str | None = None) → List[Data1D | Data2D]

    Load a file or series of files :param file_path_list: String representations of any number of file paths. This can either be a list or a string :param format: specified format to use (optional) :return: a list of DataInfo objects and/or loading exceptions.

  save(file: str, data, format: str) → bool

    Save a DataInfo object to file :param file: file name (path) :param data: DataInfo object :param format: format to write the data in

class sasdata.dataloader.loader.Registry

  Bases: `ExtensionRegistry`

  Registry class for file format extensions. Readers and writers are supported.

  associate_file_reader(file_extension, reader)

    Append a reader object to readers :param file_extension: file extension [string] :param reader: reader object

  associate_file_type(ext: str, module: ModuleType) → bool

    Look into a module to find whether it contains a Reader class. If so, APPEND it to readers and (potentially) to the list of writers for the given extension :param ext: file extension [string] :param module: module object

  find_plugins(dir: str)

    Find readers in a given directory. This method can be used to inspect user plug-in directories to find new readers/writers. :param dir: directory to search into :return: number of readers found

  load(file_path_list: List[str | Path] | str | Path, ext: List[str] | str | None = None, debug: bool | None = False, use_defaults: bool | None = True)

    Call the loader for the file type of path.

    Parameters:

      - file_path_list – A list of pathlib.Path objects and/or string representations of file paths

      - ext – A list of explicit extensions, to force the use of a particular reader for a particular file. Usage If any ext is passed, the length of the ext list should be the same as the length of the file path list. A single extention, as a string or a list of length 1, will apply ext to all files in the file path list. Any other case will result in an error.

      - debug – when True, print the traceback for each loader that fails

      - use_defaults – Flag to use the default readers as a backup if the main reader fails or no reader exists

    Defaults to the ascii (multi-column), cansas XML, and cansas NeXuS readers if no reader was registered for the file’s extension.

  lookup_writers(path)
    Returns:

      the loader associated with the file type of path.

    Raises ValueError:

      if file type is not known.

  save(path: str, data, format: str | None = None)

    Call the writer for the file type of path. Raises ValueError if no writer is available. Raises KeyError if format is not available. May raise a writer-defined exception if writer fails.