sasdata.data_util.registry module

File extension registry.

This provides routines for opening files based on extension, and registers the built-in file extensions.

class sasdata.data_util.registry.CustomFileOpen(filename, mode='rb')

Bases: object

Custom context manager to fetch file contents depending on where the file is located.

class sasdata.data_util.registry.ExtensionRegistry

Bases: object

Associate a file loader with an extension.

Note that there may be multiple loaders for the same extension.

Example:

registry = ExtensionRegistry()

# Add an association by setting an element
registry['.zip'] = unzip

# Multiple extensions for one loader
registry['.tgz'] = untar
registry['.tar.gz'] = untar

# Generic extensions to use after trying more specific extensions;
# these will be checked after the more specific extensions fail.
registry['.gz'] = gunzip

# Multiple loaders for one extension
registry['.cx'] = cx1
registry['.cx'] = cx2
registry['.cx'] = cx3

# Show registered extensions
print registry.extensions()

# Can also register a format name for explicit control from caller
registry['cx3'] = cx3
print registry.formats()

# Retrieve loaders for a file name
registry.lookup('hello.cx') -> [cx3,cx2,cx1]

# Run loader on a filename
registry.load('hello.cx') ->
    try:
        return cx3('hello.cx')
    except:
        try:
            return cx2('hello.cx')
        except:
            return cx1('hello.cx')

# Load in a specific format ignoring extension
registry.load('hello.cx',format='cx3') ->
    return cx3('hello.cx')
extensions() List[str]

Return a sorted list of registered extensions.

formats() List[str]

Return a sorted list of the registered formats.

load(path: str, ext: str | None = None) List[Data1D | Data2D]

Call the loader for a single file.

Exceptions are stored in Data1D instances, with the errors in Data1D.errors

lookup(path: str) List[callable]

Return the loader associated with the file type of path.

Parameters:

path – Data file path

Returns:

List of available readers for the file extension (maybe empty)

sasdata.data_util.registry.create_empty_data_with_errors(path: str | Path, errors: List[Exception])

Create a Data1D instance that only holds errors and a filepath. This allows all file paths to return a common data type, regardless if the data loading was successful or a failure.