class StepDefinition( AttributeCollection ): def __init__( self, step_type = None, obj = None, parent = None ): AttributeCollection.__init__( self ) self.module_instances = None # this object can be shared with the workflow # to if its =None and workflow!=None we have to # pass everything above self.module_definitions = None self.parent = parent # sort out Parameters and class attributes if ( obj == None ) or isinstance( obj, ParameterCollection ): self.setType( 'notgiven' ) self.setDescrShort( '' ) self.setDescription( '' ) self.setOrigin( '' ) self.setVersion( 0.0 ) self.parameters = ParameterCollection( obj ) # creating copy self.module_instances = InstancesPool( self ) self.module_definitions = DefinitionsPool( self ) elif isinstance( obj, StepDefinition ): self.setType( obj.getType() ) self.setDescrShort( obj.getDescrShort() ) self.setDescription( obj.getDescription() ) self.setOrigin( obj.getOrigin() ) self.setVersion( obj.getVersion() ) # copy instances and definitions self.parameters = ParameterCollection( self, obj.parameters ) self.module_instances = InstancesPool( self, obj.module_instances ) if obj.module_definitions != None: self.module_definitions = DefinitionsPool( self. obj.module_definitions ) else: raise TypeError( 'Can not create object type ' + str( type( self ) ) + ' from the ' + str( type( obj ) ) ) if step_type : self.setType( step_type ) def __str__( self ): ret = str( type( self ) ) + ':\n' + AttributeCollection.__str__( self ) + self.parameters.__str__() if self.module_definitions != None: ret = ret + str( self.module_definitions ) else: ret = ret + 'Module definitions shared in Workflow\n' ret = ret + str( self.module_instances ) return ret def toXML( self ): ret = '<StepDefinition>\n' ret = ret + AttributeCollection.toXML( self ) ret = ret + self.parameters.toXML() if self.module_definitions != None: ret = ret + self.module_definitions.toXML() ret = ret + self.module_instances.toXML() ret = ret + '</StepDefinition>\n' return ret def toXMLFile( self, outFile ): if os.path.exists( outFile ): os.remove( outFile ) xmlfile = open( outFile, 'w' ) xmlfile.write( self.toXML() ) xmlfile.close() def addModule( self, module ): # KGG We need to add code to update existing modules if self.module_definitions == None: self.parent.module_definitions.append( module ) else: self.module_definitions.append( module ) return module def createModuleInstance( self, module_type, name ): ''' Creates module instance of type 'type' with the name 'name' ''' if self.module_definitions[module_type]: mi = ModuleInstance( name, self.module_definitions[module_type] ) self.module_instances.append( mi ) return mi else: raise KeyError( 'Can not find ModuleDefinition ' + module_type + ' to create ModuleInstrance ' + name ) def removeModuleInstance( self, name ): ''' Remove module instance specified by its name ''' self.module_instances.delete( name ) def compare( self, s ): ''' Custom Step comparison operation ''' ret = AttributeCollection.compare( self, s ) and self.module_instances.compare( s ) if self.module_definitions.getOwner() == self: ret = ret and self.module_definitions.compare( s ) return ret def updateParents( self, parent ): ''' ''' #AttributeCollection.updateParents( self, parent ) self.module_instances.updateParents( self ) if( self.module_definitions != None ): self.module_definitions.updateParents( self ) def createCode( self ): ''' Create Step code ''' str_ = 'class ' + self.getType() + ':\n' str_ = str_ + indent( 1 ) + 'def execute(self):\n' str_ = str_ + self.module_instances.createCode() str_ = str_ + indent( 2 ) + '# output assignment\n' for v in self.parameters: if v.isOutput(): str_ = str_ + v.createParameterCode( 2, 'self' ) str_ += '\n' return str_
class StepDefinition(AttributeCollection): def __init__(self, step_type=None, obj=None, parent=None): AttributeCollection.__init__(self) self.module_instances = None # this object can be shared with the workflow # to if its =None and workflow!=None we have to # pass everything above self.module_definitions = None self.parent = parent # sort out Parameters and class attributes if (obj == None) or isinstance(obj, ParameterCollection): self.setType('notgiven') self.setDescrShort('') self.setDescription('') self.setOrigin('') self.setVersion(0.0) self.parameters = ParameterCollection(obj) # creating copy self.module_instances = InstancesPool(self) self.module_definitions = DefinitionsPool(self) elif isinstance(obj, StepDefinition): self.setType(obj.getType()) self.setDescrShort(obj.getDescrShort()) self.setDescription(obj.getDescription()) self.setOrigin(obj.getOrigin()) self.setVersion(obj.getVersion()) # copy instances and definitions self.parameters = ParameterCollection(self, obj.parameters) self.module_instances = InstancesPool(self, obj.module_instances) if obj.module_definitions != None: self.module_definitions = DefinitionsPool( self.obj.module_definitions) else: raise TypeError('Can not create object type ' + str(type(self)) + ' from the ' + str(type(obj))) if step_type: self.setType(step_type) def __str__(self): ret = str(type(self)) + ':\n' + AttributeCollection.__str__( self) + self.parameters.__str__() if self.module_definitions != None: ret = ret + str(self.module_definitions) else: ret = ret + 'Module definitions shared in Workflow\n' ret = ret + str(self.module_instances) return ret def toXML(self): ret = '<StepDefinition>\n' ret = ret + AttributeCollection.toXML(self) ret = ret + self.parameters.toXML() if self.module_definitions != None: ret = ret + self.module_definitions.toXML() ret = ret + self.module_instances.toXML() ret = ret + '</StepDefinition>\n' return ret def toXMLFile(self, outFile): if os.path.exists(outFile): os.remove(outFile) xmlfile = open(outFile, 'w') xmlfile.write(self.toXML()) xmlfile.close() def addModule(self, module): # KGG We need to add code to update existing modules if self.module_definitions == None: self.parent.module_definitions.append(module) else: self.module_definitions.append(module) return module def createModuleInstance(self, module_type, name): ''' Creates module instance of type 'type' with the name 'name' ''' if self.module_definitions[module_type]: mi = ModuleInstance(name, self.module_definitions[module_type]) self.module_instances.append(mi) return mi else: raise KeyError('Can not find ModuleDefinition ' + module_type + ' to create ModuleInstrance ' + name) def removeModuleInstance(self, name): ''' Remove module instance specified by its name ''' self.module_instances.delete(name) def compare(self, s): ''' Custom Step comparison operation ''' ret = AttributeCollection.compare( self, s) and self.module_instances.compare(s) if self.module_definitions.getOwner() == self: ret = ret and self.module_definitions.compare(s) return ret def updateParents(self, parent): ''' ''' #AttributeCollection.updateParents( self, parent ) self.module_instances.updateParents(self) if (self.module_definitions != None): self.module_definitions.updateParents(self) def createCode(self): ''' Create Step code ''' str_ = 'class ' + self.getType() + ':\n' str_ = str_ + indent(1) + 'def execute(self):\n' str_ = str_ + self.module_instances.createCode() str_ = str_ + indent(2) + '# output assignment\n' for v in self.parameters: if v.isOutput(): str_ = str_ + v.createParameterCode(2, 'self') str_ += '\n' return str_