ESBO-ETC/esbo_etc/classes/optical_component/OpticalComponentFactory.py
2020-09-12 11:51:49 +02:00

82 lines
3.1 KiB
Python

from ..ARadiantFactory import ARadiantFactory
from ..Entry import Entry
from ..IRadiant import IRadiant
from .AOpticalComponent import AOpticalComponent
from ...classes import optical_component as oc
from ...lib.logger import logger
class OpticalComponentFactory(ARadiantFactory):
"""
A Factory creating objects of the type IRadiant
"""
def __init__(self, common_conf: Entry):
"""
Instantiate a new factory object
Parameters
----------
common_conf : Entry
The common configuration of the configuration file
"""
super().__init__(common_conf)
def create(self, options: Entry, parent: IRadiant = None) -> AOpticalComponent:
"""
Create a new object of the type IRadiant
Parameters
----------
options : Entry
The options to be used as parameters for the instantiation of the new object.
parent : IRadiant
The optional parent element of the object (necessary for subclasses of AOpticalComponent).
Returns
-------
obj : AOpticalComponent
The created optical component
"""
if parent is not None:
opts = self.collectOptions(options)
opts["parent"] = parent
if hasattr(oc, options.type):
class_ = getattr(oc, options.type)
return class_(**opts)
else:
logger.error("Unknown optical component type: '" + options.type + "'")
else:
logger.error("Parent object is required for optical component.")
def fromConfigBatch(self, conf: Entry, parent: IRadiant) -> AOpticalComponent:
"""
Initialize a decorated target from a configuration.
Parameters
----------
conf : Entry
The configuration defining the target and the decorators.
parent : IRadiant
The optional parent element of the object
Returns
-------
parent : AOpticalComponent
The decorated parent object.
"""
if hasattr(conf.astroscene, "optical_component"):
for entry in conf.astroscene.optical_component if type(conf.astroscene.optical_component) == list else\
[conf.astroscene.optical_component]:
parent = self.create(entry, parent)
if hasattr(conf, "common_optics") and hasattr(conf.common_optics, "optical_component"):
for entry in conf.common_optics.optical_component if type(conf.common_optics.optical_component) == \
list else [conf.common_optics.optical_component]:
if isinstance(entry, Entry):
parent = self.create(entry, parent)
if hasattr(conf, "instrument") and hasattr(conf.instrument, "optical_component"):
for entry in conf.instrument.optical_component if type(conf.instrument.optical_component) == list else\
[conf.instrument.optical_component]:
if isinstance(entry, Entry):
parent = self.create(entry, parent)
return parent