# -*- coding: utf-8 -*-
"""
<DefineSource>
@Date : Fri Nov 14 13:20:38 2014 \n
@Author : Erwan Ledoux \n\n
</DefineSource>
A Restricter object sets only in the __dict__ only if hasattr(self,self.SettingKeyVariable)
returns True before.
"""
#<DefineAugmentation>
import ShareYourSystem as SYS
BaseModuleStr="ShareYourSystem.Itemizers.Attributer"
DecorationModuleStr="ShareYourSystem.Classors.Classer"
SYS.setSubModule(globals())
#</DefineAugmentation>
#<ImportSpecificModules>
#</ImportSpecificModules>
#<DefineClass>
@DecorationClass()
class RestricterClass(BaseClass):
#Definition
RepresentingKeyStrsList=[
'RestrictingIsBool',
'RestrictingKeyStr',
'RestrictedSetIsBool'
]
def default_init(self,
_RestrictingIsBool=False,
_RestrictingKeyStr=None,
_RestrictedSetIsBool=True,
**_KwargVariablesDict
):
#Call the parent init method
BaseClass.__init__(self,**_KwargVariablesDict)
def do_restrict(self):
#Init
self.RestrictedSetIsBool=True
#debug
'''
self.debug(('self.',self,['RestrictingIsBool','RestrictingKeyStr']))
'''
#Check
if self.RestrictingIsBool:
#Check
if hasattr(self,self.RestrictingKeyStr):
self.RestrictedSetIsBool=False
else:
#set to False
self.RestrictedSetIsBool=False
#<Hook>@Hooker.HookerClass(**{'HookingAfterVariablesList':[BaseClass.set]})
#@Imitater.ImitaterClass()
def mimic_set(self):
""" """
#debug
'''
self.debug(('self.',self,['SettingKeyVariable','SettingValueVariable']))
'''
#Definition
OutputDict={'HookingIsBool':True}
#debug
'''
self.debug('We are going to restrict')
'''
#restrict
self.restrict(_KeyStr=self.SettingKeyVariable)
#<Hook>
#Stop the setting
if self.RestrictedSetIsBool:
OutputDict["HookingIsBool"]=False
return OutputDict
#</Hook>
#Debug
'''
self.debug(
[
'BaseClass is '+str(BaseClass),
'BaseClass.set is '+str(BaseClass.set),
]
)
'''
#Call the parent set method
return BaseClass.set(self)
#</DefineClass>
View the Restricter sources on Github
#ImportModules
import ShareYourSystem as SYS
from ShareYourSystem.Itemizers import Restricter
#Explicit expression
MyRestricter=Restricter.RestricterClass(**{'RestrictingIsBool':True})
MyRestricter.ResettedStr="Hello"
MyRestricter.__setitem__('ResettedStr',"Bonjour")
MyRestricter.__setitem__('NotsettedFloat',1.)
#Return
SYS._attest(
[
'MyRestricter is '+SYS._str(
MyRestricter,
**{
'RepresentingBaseKeyStrsListBool':False,
'RepresentingAlineaIsBool':False
}
)
]
)
#Print
>>>
*****Start of the Attest *****
MyRestricter is < (RestricterClass), 4554378320>
/{
/ '<New><Instance>IdInt' : 4554378320
/ '<New><Instance>ResettedStr' : Bonjour
/ '<Spe><Instance>RestrictedSetIsBool' : True
/ '<Spe><Instance>RestrictingIsBool' : True
/ '<Spe><Instance>RestrictingKeyStr' : NotsettedFloat
/}
*****End of the Attest *****