# -*- coding: utf-8 -*-
"""
<DefineSource>
@Date : Fri Nov 14 13:20:38 2014 \n
@Author : Erwan Ledoux \n\n
</DefineSource>
An Executer can exec commands with the six.exec_ function
"""
#<DefineAugmentation>
import ShareYourSystem as SYS
BaseModuleStr="ShareYourSystem.Itemizers.Sharer"
DecorationModuleStr="ShareYourSystem.Classors.Classer"
SYS.setSubModule(globals())
#</DefineAugmentation>
#<ImportSpecificModules>
import six
#</ImportSpecificModules>
#<DefineLocals>
ExecutingPrefixStr="Exec_"
#</DefineLocals>
#<DefineClass>
@DecorationClass()
class ExecuterClass(BaseClass):
#Definition
RepresentingKeyStrsList=[
'ExecutingPrefixStr'
]
def default_init(self,
_ExecutingPrefixStr="" ,
**_KwargVariablesDict):
#Call the parent __init__ method
BaseClass.__init__(self,**_KwargVariablesDict)
#<Hook>@Hooker.HookerClass(**{'HookingBeforeCallingDictsList':[BaseClass.get]})
#@Imitater.ImitaterClass()
def mimic_get(self):
#Check
if self.GettingKeyVariable.startswith(ExecutingPrefixStr):
#Definition the ExecStr
self.ExecutingPrefixStr=ExecutingPrefixStr.join(
self.GettingKeyVariable.split(ExecutingPrefixStr)[1:])
#debug
'''
self.debug(('self.',self,['ExecutingPrefixStr']))
'''
#Put the output in a local Local Variable
self.execute()
#debug
'''
self.debug('BaseClass.get is '+str(BaseClass.get))
'''
#Call the parent get method
return BaseClass.get(self)
#<Hook>@Hooker.HookerClass(**{'HookingBeforeCallingDictsList':[BaseClass.set]})
#@Imitater.ImitaterClass()
def mimic_set(self):
#Check
if type(self.SettingValueVariable
) in SYS.StrTypesList and self.SettingValueVariable.startswith(
ExecutingPrefixStr):
#Definition the ExecStr
self.ExecutingPrefixStr=ExecutingPrefixStr.join(
self.SettingValueVariable.split(ExecutingPrefixStr)[1:])
#debug
'''
self.debug(('self.',self,['ExecutingPrefixStr',"SettingValueVariable"]))
'''
#Put the output in a local Local Variable
self.execute()
#debug
'''
self.debug(('self.',self,['ExecutingPrefixStr',"SettingValueVariable"]))
'''
#Call the parent get method
BaseClass.set(self)
def do_execute(self):
#Execute
six.exec_(self.ExecutingPrefixStr,locals())
#Return self
#return self
#</DefineClass>
View the Executer sources on Github
In [3]:
#ImportModules
import ShareYourSystem as SYS
from ShareYourSystem.Classors import Attester
from ShareYourSystem.Itemizers import Executer
#Definition and update with an exec Str
MyExecuter=Executer.ExecuterClass()
MySecondInt=MyExecuter.__setitem__(
'MySecondInt',
'Exec_self.SettingValueVariable=1+1'
).MySecondInt
#Exec is also possible in a getting
GettedValueVariable=MyExecuter['Exec_self.GettedValueVariable=self.MySecondInt-1']
#Definition the AttestedStr
SYS._attest(
[
'MySecondInt is '+str(MySecondInt),
'GettedValueVariable is '+str(GettedValueVariable)
]
)
#Print