def get_attribute_values(self): ''' Get attributes Controller associated to a process Returns ------- attributes: Controller ''' t = self.trait('capsul_attributes') if t is None: try: pattributes = ProcessCompletionEngine.get_completion_engine( self.process.process).get_attribute_values() except AttributeError: # ProcessCompletionEngine not implemented for this process: # no completion return schemas = self._get_schemas() attributes = ProcessAttributes(self.process, schemas) self.add_trait('capsul_attributes', ControllerTrait(Controller())) self.capsul_attributes = attributes iter_attrib = self.get_iterated_attributes() for attrib, trait in six.iteritems(pattributes.user_traits()): if attrib not in iter_attrib: attributes.add_trait(attrib, trait) for attrib in iter_attrib: trait = pattributes.trait(attrib) if trait is not None: attributes.add_trait( attrib, traits.List(trait, output=trait.output)) value = getattr(pattributes, attrib, None) if value is not None and value is not traits.Undefined: setattr(attributes, attrib, [value]) return self.capsul_attributes
def get_attribute_values(self): ''' Get attributes Controller associated to a process Returns ------- attributes: Controller ''' if self.trait('capsul_attributes') is not None \ and hasattr(self, 'capsul_attributes'): return self.capsul_attributes self.add_trait('capsul_attributes', ControllerTrait(Controller())) schemas = self._get_schemas() #schemas = self.process.get_study_config().modules_data.foms.keys() self.capsul_attributes = ProcessAttributes(self.process, schemas) self.create_attributes_with_fom() return self.capsul_attributes
def get_attribute_values(self): if self.trait('capsul_attributes') is not None \ and hasattr(self, 'capsul_attributes'): return self.capsul_attributes self.add_trait('capsul_attributes', ControllerTrait(Controller())) capsul_attributes = ProcessAttributes(self.process, {}) self.capsul_attributes = capsul_attributes outputs = self.process._outputs schema = 'switch' # FIXME name = getattr(self.process, 'context_name', self.name) pipeline_name = '.'.join(name.split('.')[:-1]) if pipeline_name == '': pipeline_name = [] else: pipeline_name = [pipeline_name] forbidden_attributes = set( ['generated_by_parameter', 'generated_by_process']) traits_types = { str: traits.Str, unicode: traits.Str, int: traits.Int, float: traits.Float, list: traits.List } for out_name in outputs: in_name = '_switch_'.join((self.process.switch, out_name)) found = False for output, name in ((False, in_name), (True, out_name)): plug = self.process.plugs.get(name) if plug is None: continue if output: links = plug.links_to else: links = plug.links_from for link in links: node = link[2] if isinstance(node, Switch): # FIXME: just for now continue if link[0] == '': # link to the parent pipeline: don't call it to avoid # an infinite loop. # Either it will provide attributes by its own, either # we must not take them into account, so skip it. continue if hasattr(node, 'process'): process = node.process else: process = node proc_name = '.'.join(pipeline_name + [link[0]]) completion_engine \ = ProcessCompletionEngine.get_completion_engine( process, name=proc_name) attributes = completion_engine.get_attribute_values() try: param_attributes \ = attributes.get_parameters_attributes()[link[1]] except: continue if len(param_attributes) != 0 \ and len([x for x in param_attributes.keys() if x not in forbidden_attributes]) != 0: ea = EditableAttributes() for attribute, value in six.iteritems( param_attributes): if attribute not in forbidden_attributes: ttype = traits_types.get(type(value)) if ttype is not None: trait = ttype() else: trait = value ea.add_trait(attribute, ttype) setattr(ea, attribute, value) capsul_attributes.set_parameter_attributes( name, schema, ea, {}) found = True break if found: break if found: # propagate from input/output to other side ea = EditableAttributes() for attribute, value in six.iteritems(param_attributes): ttype = traits_types.get(type(value)) if ttype is not None: trait = ttype() else: trait = value ea.add_trait(attribute, ttype) setattr(ea, attribute, value) if output: capsul_attributes.set_parameter_attributes( in_name, schema, ea, {}) else: capsul_attributes.set_parameter_attributes( out_name, schema, ea, {}) self.install_switch_observer() return capsul_attributes
def get_attribute_values(self): if self.process.name == 'select_renormalization_commissures': debug = True else: debug = False if self.trait('capsul_attributes') is not None \ and hasattr(self, 'capsul_attributes'): return self.capsul_attributes self.add_trait('capsul_attributes', ControllerTrait(Controller())) capsul_attributes = ProcessAttributes(self.process, {}) self.capsul_attributes = capsul_attributes outputs = self.process._outputs schema = 'switch' # FIXME name = getattr(self.process, 'context_name', self.name) pipeline_name = '.'.join(name.split('.')[:-1]) if pipeline_name == '': pipeline_name = [] else: pipeline_name = [pipeline_name] forbidden_attributes = set(['generated_by_parameter', 'generated_by_process']) traits_types = {str: traits.Str, unicode: traits.Str, int: traits.Int, float: traits.Float, list: traits.List} for out_name in outputs: in_name = '_switch_'.join((self.process.switch, out_name)) found = False for output, name in ((False, in_name), (True, out_name)): plug = self.process.plugs.get(name) if plug is None: continue if output: links = plug.links_to else: links = plug.links_from for link in links: node = link[2] if isinstance(node, Switch): # FIXME: just for now continue if link[0] == '': # link to the parent pipeline: don't call it to avoid # an infinite loop. # Either it will provide attributes by its own, either # we must not take them into account, so skip it. continue if hasattr(node, 'process'): process = node.process else: process = node proc_name = '.'.join(pipeline_name + [link[0]]) completion_engine \ = ProcessCompletionEngine.get_completion_engine( process, name=proc_name) attributes = completion_engine.get_attribute_values() try: param_attributes \ = attributes.get_parameters_attributes()[link[1]] except: continue if len(param_attributes) != 0 \ and len([x for x in param_attributes.keys() if x not in forbidden_attributes]) != 0: ea = EditableAttributes() for attribute, value in six.iteritems( param_attributes): if attribute not in forbidden_attributes: ttype = traits_types.get(type(value)) if ttype is not None: trait = ttype() else: trait = value ea.add_trait(attribute, ttype) setattr(ea, attribute, value) capsul_attributes.set_parameter_attributes( name, schema, ea, {}) found = True break if found: break if found: # propagate from input/output to other side ea = EditableAttributes() for attribute, value in six.iteritems( param_attributes): ttype = traits_types.get(type(value)) if ttype is not None: trait = ttype() else: trait = value ea.add_trait(attribute, ttype) setattr(ea, attribute, value) if output: capsul_attributes.set_parameter_attributes( in_name, schema, ea, {}) else: capsul_attributes.set_parameter_attributes( out_name, schema, ea, {}) self.install_switch_observer() return capsul_attributes