Registry¶
-
class
lsst.pex.config.
Registry
(configBaseType=<class 'lsst.pex.config.config.Config'>)¶ Bases:
collections.abc.Mapping
A base class for global registries, which map names to configurables.
A registry acts like a read-only dictionary with an additional
register
method to add targets. Targets in the registry are configurables (see Notes).Parameters: - configBaseType :
lsst.pex.config.Config
-type The base class for config classes in the registry.
Notes
A configurable is a callable with call signature
(config, *args)
Configurables typically create an algorithm or are themselves the algorithm. Often configurables arelsst.pipe.base.Task
subclasses, but this is not required.A
Registry
has these requirements:- All configurables added to a particular registry have the same call signature.
- All configurables in a registry typically share something important
in common. For example, all configurables in
psfMatchingRegistry
return a PSF matching class that has apsfMatch
method with a particular call signature.
Examples
This examples creates a configurable class
Foo
and adds it to a registry. First, creating the configurable:>>> from lsst.pex.config import Registry, Config >>> class FooConfig(Config): ... val = Field(dtype=int, default=3, doc="parameter for Foo") ... >>> class Foo: ... ConfigClass = FooConfig ... def __init__(self, config): ... self.config = config ... def addVal(self, num): ... return self.config.val + num ...
Next, create a
Registry
instance calledregistry
and register theFoo
configurable under the"foo"
key:>>> registry = Registry() >>> registry.register("foo", Foo) >>> print(list(registry.keys())) ["foo"]
Now
Foo
is conveniently accessible from the registry itself.Finally, use the registry to get the configurable class and create an instance of it:
>>> FooConfigurable = registry["foo"] >>> foo = FooConfigurable(FooConfigurable.ConfigClass()) >>> foo.addVal(5) 8
Methods Summary
get
(k[,d])items
()keys
()makeField
(doc[, default, optional, multi])Create a RegistryField
configuration field from this registry.register
(name, target[, ConfigClass])Add a new configurable target to the registry. values
()Methods Documentation
-
get
(k[, d]) → D[k] if k in D, else d. d defaults to None.¶
-
items
() → a set-like object providing a view on D's items¶
-
keys
() → a set-like object providing a view on D's keys¶
-
makeField
(doc, default=None, optional=False, multi=False)¶ Create a
RegistryField
configuration field from this registry.Parameters: - doc :
str
A description of the field.
- default : object, optional
The default target for the field.
- optional :
bool
, optional When
False
,lsst.pex.config.Config.validate
fails if the field’s value isNone
.- multi :
bool
, optional A flag to allow multiple selections in the
RegistryField
ifTrue
.
Returns: - field :
lsst.pex.config.RegistryField
RegistryField
Configuration field.
- doc :
-
register
(name, target, ConfigClass=None)¶ Add a new configurable target to the registry.
Parameters: - name :
str
Name that the
target
is registered under. The target can be accessed later withdict
-like patterns usingname
as the key.- target : obj
A configurable type, usually a subclass of
lsst.pipe.base.Task
.- ConfigClass :
lsst.pex.config.Config
-type, optional A subclass of
lsst.pex.config.Config
used to configure the configurable. IfNone
then the configurable’sConfigClass
attribute is used.
Raises: - RuntimeError
Raised if an item with
name
is already in the registry.- AttributeError
Raised if
ConfigClass
isNone
andtarget
does not have aConfigClass
attribute.
Notes
If
ConfigClass
is provided then thetarget
configurable is wrapped in a new object that forwards function calls to it. Otherwise the originaltarget
is stored.- name :
-
values
() → an object providing a view on D's values¶
- configBaseType :