def do_imitate(self): #Debug ''' print('l. 63 Imitater') print('self.ImitatingFunction is ',self.ImitatingFunction) print('') ''' #Definitions ImitatedDoMethodStr=self.ImitatingFunction.__name__ ImitatedDoStr=ImitatedDoMethodStr[0].upper()+ImitatedDoMethodStr[1:] ImitatedDoerStr=Doer.getDoerStrWithDoStr(ImitatedDoStr) #Debug ''' print('ImitatedDoMethodStr is ',ImitatedDoMethodStr) print('ImitatedDoStr is ',ImitatedDoStr) print('ImitatedDoerStr is ',ImitatedDoerStr) print('') ''' #Definitions ImitatedModule=getattr(SYS,ImitatedDoerStr) ImitatedClass=getattr(ImitatedModule,SYS.getClassStrWithNameStr(ImitatedDoerStr)) ImitatedDoneExecStr=getattr( ImitatedClass, ImitatedClass.NameStr+'DoneExecStr' ).replace('def DoerFunction','def ImitaterFunction') #Define def imitateDo(_InstanceVariable,*_LiargVariablesList,**_KwargVariablesDict): #Debug ''' print('Imitater l.93 inside of the function imitateDo') print('_InstanceVariable is ',_InstanceVariable) print('_LiargVariablesList is ',_LiargVariablesList) print('_KwargVariablesDict is ',_KwargVariablesDict) print('') ''' if len(_KwargVariablesDict)>0: #group by [ImitatedItemTuplesList,ImitatedNotItemTuplesList]=SYS.groupby( lambda __ItemTuple:hasattr(_InstanceVariable,__ItemTuple[0]), _KwargVariablesDict.items() ) #Debug ''' print('ImitatedItemTuplesList is ',ImitatedItemTuplesList) print('ImitatedNotItemTuplesList is ',ImitatedNotItemTuplesList) print('') ''' #set in the instance the corresponding kwarged arguments map( lambda __ItemTuple: #set direct explicit attributes _InstanceVariable.__setattr__(*__ItemTuple), ImitatedItemTuplesList ) #Define ImitatedKwargDict=dict(ImitatedNotItemTuplesList) else: #Define ImitatedKwargDict={} #Init ImitatedOutputVariable=None #Debug ''' print('l.141 Imitater') print('self.ImitatingFunction is ',self.ImitatingFunction) print('ImitatedKwargDict is ',ImitatedKwargDict) print('') ''' #call the imitated function if len(ImitatedKwargDict)>0: ImitatedOutputVariable=self.ImitatingFunction( _InstanceVariable, *_LiargVariablesList, **ImitatedKwargDict ) else: ImitatedOutputVariable=self.ImitatingFunction( _InstanceVariable, *_LiargVariablesList ) #Check if ImitatedClass.DoingGetBool==False: #Return return _InstanceVariable else: #Return the return ImitatedOutputVariable #Link ImitatedFunctionKeyStr='imitate'+ImitatedDoStr+'With'+inspect.getmodule( self.ImitatingFunction ).__name__.split('.')[-1] if hasattr(ImitatedClass,ImitatedFunctionKeyStr)==False: setattr(ImitatedClass,ImitatedFunctionKeyStr,imitateDo) else: ImitatedLastInt=sorted( map( lambda __MethodKeyStr: (int)(__MethodKeyStr.split('_')[-1]), SYS._filter( lambda __KeyStr: __KeyStr.startswith(ImitatedFunctionKeyStr), ImitatedClass.__dict__.keys() ) ) )[-1] setattr(ImitatedClass,ImitatedFunctionKeyStr+'_'+str(ImitatedLastInt),imitateDo) #Add to the ImitatedDoneExecStr ImitatedDoneExecStr+='\n\treturn _InstanceVariable.'+ImitatedFunctionKeyStr+'(*_LiargVariablesList,**_KwargVariablesDict)' #Debug ''' print('ImitatedDoneExecStr is ') print(ImitatedDoneExecStr) print('') ''' #exec six.exec_(ImitatedDoneExecStr) #set the name locals()['ImitaterFunction'].__name__=self.__class__.NameStr+Doer.DoingDecorationStr+ImitatedDoMethodStr #Link self.ImitatedFunction=locals()['ImitaterFunction']
def argument(self,_Variable): #debug ''' self.debug(('locals ',locals(),['_Variable'])) ''' #set if self.ArgumentingFunction==None or _Variable!=None: self.ArgumentingFunction=_Variable #set the ArgumentingDoStr if not already if self.ArgumentingDoStr=="": #debug ''' self.debug(('self.',self,['ArgumentingFunction'])) ''' #Keep only the last part of the name to avoid the FunctingDecorationStrs NameStr=self.ArgumentingFunction.__name__.split(Functer.FunctingDecorationStr)[-1] #Then transform into an object VariableStr self.ArgumentingDoStr=NameStr[0].upper()+NameStr[1:] #debug ''' self.debug(('self.',self,['ArgumentingDoStr'])) ''' #set the ArgumentedDoingStr self.ArgumentedDoingStr=Doer.getDoingStrWithDoneStr( Doer.getDoneStrWithDoStr(self.ArgumentingDoStr) ) #Find the Arguments Types self.ArgumentedInspectOrderedDict=SYS.getArgumentDictWithFunction(self.ArgumentingFunction) #Definition the ArgumentedFunction def ArgumentedFunction(_InstanceVariable,*_LiargVariablesList,**_KwargVariablesDict): #debug ''' self.debug( [ ('',locals(),[ '_LiargVariablesList' ]), ('self.',self,[ 'ArgumentingDoStr', 'ArgumentedDoingStr', 'ArgumentedInspectOrderedDict' ]) ] ) ''' #set in the instance the corresponding listed arguments if they are not None map( lambda __KeyStr,__Variable: _InstanceVariable.__setattr__(__KeyStr,__Variable) if __Variable!=None and hasattr(_InstanceVariable,__KeyStr) else None, map( lambda __InputKeyStr: self.ArgumentedDoingStr+ArgumentingStr.join( __InputKeyStr.split(ArgumentingStr)[1:] ), self.ArgumentedInspectOrderedDict['InputKeyStrsList'][1:] ), _LiargVariablesList ) #Definition the ArgumentedSetTuplesList ArgumentedKwargTuplesList=map( lambda __ItemTuple: ( self.ArgumentedDoingStr+ArgumentingStr.join( __ItemTuple[0].split(ArgumentingStr)[1:]), __ItemTuple[1] ) if __ItemTuple[0].startswith(ArgumentingStr) else __ItemTuple, _KwargVariablesDict.items() ) #set in the instance the corresponding kwarged arguments map( lambda __ItemTuple: #set direct explicit attributes _InstanceVariable.__setattr__(*__ItemTuple) if hasattr(_InstanceVariable,__ItemTuple[0]) else None, ArgumentedKwargTuplesList ) #Call the argumenting self.ArgumentingFunction return self.ArgumentingFunction(_InstanceVariable,*_LiargVariablesList,**_KwargVariablesDict) #set self.ArgumentedFunction=ArgumentedFunction #Return self return self