Source code for capsul.attributes.completion_engine_factory

# -*- coding: utf-8 -*-
'''
Instantiate a default :class:`~capsul.attributes.completion_engine.ProcessCompletionEngine`

Classes
=======
:class:`BuiltinProcessCompletionEngineFactory`
----------------------------------------------
'''

from __future__ import absolute_import
from capsul.attributes.completion_engine import ProcessCompletionEngine, \
    PathCompletionEngine, ProcessCompletionEngineFactory
from capsul.attributes.completion_engine_iteration \
    import ProcessCompletionEngineIteration
from capsul.attributes.fom_completion_engine \
    import FomProcessCompletionEngine, FomPathCompletionEngine, \
    FomProcessCompletionEngineIteration
from capsul.pipeline.process_iteration import ProcessIteration
from capsul.pipeline.pipeline_nodes import ProcessNode


[docs] class BuiltinProcessCompletionEngineFactory(ProcessCompletionEngineFactory): ''' ''' factory_id = 'builtin'
[docs] def get_completion_engine(self, process, name=None): ''' Factory for ProcessCompletionEngine: get an ProcessCompletionEngine instance for a node or process in the context of a given StudyConfig. The study_config should specify which completion system(s) is (are) used (FOM, ...) If nothing is configured, a ProcessCompletionEngine base instance will be returned. It will not be able to perform completion at all, but will conform to the API. ''' if hasattr(process, 'completion_engine'): return process.completion_engine study_config = process.get_study_config() # FOM if 'FomConfig' in study_config.modules and study_config.use_fom: try: pfom = FomProcessCompletionEngine(process, name) if pfom is not None: pfom.create_attributes_with_fom() return pfom except KeyError: # process not in FOM pass # iteration in_process = process if isinstance(process, ProcessNode): in_process = process.process if isinstance(in_process, ProcessIteration): if isinstance( ProcessCompletionEngine.get_completion_engine( in_process.process), FomProcessCompletionEngine): return FomProcessCompletionEngineIteration(process, name) else: return ProcessCompletionEngineIteration(process, name) # standard ProcessCompletionEngine return super(BuiltinProcessCompletionEngineFactory, self).get_completion_engine(process, name)