StorageClassFactory

class lsst.daf.butler.StorageClassFactory

Bases: object

Factory for StorageClass instances.

This class is a singleton, with each instance sharing the pool of StorageClasses. Since code can not know whether it is the first time the instance has been created, the constructor takes no arguments. To populate the factory with storage classes, a call to addFromConfig() should be made.

Parameters:
configStorageClassConfig or str, optional

Load configuration. In a ButlerConfig` the relevant configuration is located in the storageClasses section.

Methods Summary

addFromConfig(config)

Add more StorageClass definitions from a config file.

findStorageClass(pytype[, compare_types])

Find the storage class associated with this python type.

getStorageClass(storageClassName)

makeNewStorageClass(name[, baseClass])

Create a new Python class as a subclass of StorageClass.

registerStorageClass(storageClass[, msg])

Store the StorageClass in the factory.

reset()

Remove all storage class entries from factory and reset to initial state.

Methods Documentation

addFromConfig(config: StorageClassConfig | Config | str) None

Add more StorageClass definitions from a config file.

Parameters:
configStorageClassConfig, Config or str

Storage class configuration. Can contain a storageClasses key if part of a global configuration.

findStorageClass(pytype: type, compare_types: bool = False) StorageClass

Find the storage class associated with this python type.

Parameters:
pytypetype

The Python type to be matched.

compare_typesbool, optional

If False, the type will be checked against name of the python type. This comparison is always done first. If True and the string comparison failed, each candidate storage class will be forced to have its type imported. This can be significantly slower.

Returns:
storageClassStorageClass

The matching storage class.

Raises:
KeyError

Raised if no match could be found.

Notes

It is possible for a python type to be associated with multiple storage classes. This method will currently return the first that matches.

getStorageClass(storageClassName: str) StorageClass
static makeNewStorageClass(name: str, baseClass: type[lsst.daf.butler._storage_class.StorageClass] | None = <class 'lsst.daf.butler._storage_class.StorageClass'>, **kwargs: ~typing.Any) type[lsst.daf.butler._storage_class.StorageClass]

Create a new Python class as a subclass of StorageClass.

Parameters:
namestr

Name to use for this class.

baseClasstype, optional

Base class for this StorageClass. Must be either StorageClass or a subclass of StorageClass. If None, StorageClass will be used.

**kwargs

Additional parameter values to use as defaults for this class. This can include components, parameters, derivedComponents, and converters.

Returns:
newtypetype subclass of StorageClass

Newly created Python type.

registerStorageClass(storageClass: StorageClass, msg: str | None = None) None

Store the StorageClass in the factory.

Will be indexed by StorageClass.name and will return instances of the supplied StorageClass.

Parameters:
storageClassStorageClass

Type of the Python StorageClass to register.

msgstr, optional

Additional message string to be included in any error message.

Raises:
ValueError

If a storage class has already been registered with that storage class name and the previous definition differs.

reset() None

Remove all storage class entries from factory and reset to initial state.

This is useful for test code where a known start state is useful.