ListDelegate

class lsst.daf.butler.tests.ListDelegate(storageClass: StorageClass)

Bases: StorageClassDelegate

Parameter handler for list parameters.

Methods Summary

assemble(components[, pytype])

Construct an object from components based on storageClass.

copy(inMemoryDataset)

Copy the supplied python type and return the copy.

disassemble(composite[, subset, override])

Disassembler a composite.

getComponent(composite, componentName)

Attempt to retrieve component from composite object by heuristic.

handleParameters(inMemoryDataset[, parameters])

Modify the in-memory dataset using the supplied parameters, returning a possibly new object.

selectResponsibleComponent(derivedComponent, ...)

Select the best component for calculating a derived component.

Methods Documentation

assemble(components: dict[str, Any], pytype: type | None = None) Any

Construct an object from components based on storageClass.

This generic implementation assumes that instances of objects can be created either by passing all the components to a constructor or by calling setter methods with the name.

Parameters:
componentsdict

Collection of components from which to assemble a new composite object. Keys correspond to composite names in the StorageClass.

pytypetype, optional

Override the type from the StorageClassDelegate.storageClass to use when assembling the final object.

Returns:
compositeobject

New composite object assembled from components.

Raises:
ValueError

Some components could not be used to create the object or, alternatively, some components were not defined in the associated StorageClass.

copy(inMemoryDataset: Any) Any

Copy the supplied python type and return the copy.

Parameters:
inMemoryDatasetobject

Object to copy.

Returns:
copiedobject

A copy of the supplied object. Can be the same object if the object is known to be read-only.

Raises:
NotImplementedError

Raised if none of the default methods for copying work.

Notes

The default implementation uses copy.deepcopy(). It is generally expected that this method is the equivalent of a deep copy. Subclasses can override this method if they already know the optimal approach for deep copying.

disassemble(composite: Any, subset: Iterable | None = None, override: Any | None = None) dict[str, lsst.daf.butler.core.storageClassDelegate.DatasetComponent]

Disassembler a composite.

This is a generic implementation of a disassembler. This implementation attempts to extract components from the parent by looking for attributes of the same name or getter methods derived from the component name.

Parameters:
compositeobject

Parent composite object consisting of components to be extracted.

subsetiterable, optional

Iterable containing subset of components to extract from composite. Must be a subset of those defined in StorageClassDelegate.storageClass.

overrideobject, optional

Object to use for disassembly instead of parent. This can be useful when called from subclasses that have composites in a hierarchy.

Returns:
componentsdict

dict with keys matching the components defined in StorageClassDelegate.storageClass and values being DatasetComponent instances describing the component.

Raises:
ValueError

A requested component can not be found in the parent using generic lookups.

TypeError

The parent object does not match the supplied StorageClassDelegate.storageClass.

getComponent(composite: Any, componentName: str) Any

Attempt to retrieve component from composite object by heuristic.

Will attempt a direct attribute retrieval, or else getter methods of the form “get_componentName” and “getComponentName”.

Parameters:
compositeobject

Item to query for the component.

componentNamestr

Name of component to retrieve.

Returns:
componentobject

Component extracted from composite.

Raises:
AttributeError

The attribute could not be read from the composite.

handleParameters(inMemoryDataset: Any, parameters: Mapping[str, Any] | None = None) Any

Modify the in-memory dataset using the supplied parameters, returning a possibly new object.

Parameters:
inMemoryDatasetobject

Object to modify based on the parameters.

parametersdict

Parameters to apply. Values are specific to the parameter. Supported parameters are defined in the associated StorageClass. If no relevant parameters are specified the inMemoryDataset will be return unchanged.

Returns:
inMemoryDatasetobject

Updated form of supplied in-memory dataset, after parameters have been used.

classmethod selectResponsibleComponent(derivedComponent: str, fromComponents: set[str | None]) str

Select the best component for calculating a derived component.

Given a possible set of components to choose from, return the component that should be used to calculate the requested derived component.

Parameters:
derivedComponentstr

The derived component that is being requested.

fromComponentsset of str

The available set of component options from which that derived component can be computed. None can be included but should be ignored.

Returns:
requiredstr

The component that should be used.

Raises:
NotImplementedError

Raised if this delegate refuses to answer the question.

ValueError

Raised if this delegate can not determine a relevant component from the supplied options.