Added property managment in @classdecorator. Unused :-( ...
This commit is contained in:
parent
79f3350eba
commit
51c6b90160
|
@ -124,6 +124,16 @@ class CfgCache ( object ):
|
||||||
# Effective setting of the Cfg parameter.
|
# Effective setting of the Cfg parameter.
|
||||||
cache.apply()
|
cache.apply()
|
||||||
|
|
||||||
|
If a cache parameter is assigned to ``None``, it triggers the
|
||||||
|
loading of the value from the disk, it it exists.
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
# Setup of a CfgCache parameter.
|
||||||
|
cache = CfgCache('')
|
||||||
|
cache.katana.eventsLimit = None
|
||||||
|
# The parameter will read it's value from the disk (4000000).
|
||||||
|
|
||||||
|
|
||||||
This is done by overloading ``__setattr__()`` and ``__getattr__()``
|
This is done by overloading ``__setattr__()`` and ``__getattr__()``
|
||||||
which recursively create CfgCache objects for intermediate levels
|
which recursively create CfgCache objects for intermediate levels
|
||||||
|
@ -190,7 +200,6 @@ class CfgCache ( object ):
|
||||||
self._priority = priority
|
self._priority = priority
|
||||||
self._path = path
|
self._path = path
|
||||||
self._rattr = {}
|
self._rattr = {}
|
||||||
return
|
|
||||||
|
|
||||||
def __setattr__ ( self, attr, v ):
|
def __setattr__ ( self, attr, v ):
|
||||||
"""
|
"""
|
||||||
|
@ -232,7 +241,6 @@ class CfgCache ( object ):
|
||||||
if v is None:
|
if v is None:
|
||||||
v = CfgCache.getDefaultCfgParameter( self._path+'.'+attr )
|
v = CfgCache.getDefaultCfgParameter( self._path+'.'+attr )
|
||||||
self._rattr[ attr ] = v
|
self._rattr[ attr ] = v
|
||||||
return
|
|
||||||
|
|
||||||
def __getattr__ ( self, attr ):
|
def __getattr__ ( self, attr ):
|
||||||
"""
|
"""
|
||||||
|
@ -244,6 +252,20 @@ class CfgCache ( object ):
|
||||||
self._rattr[attr] = CfgCache( path, self._priority )
|
self._rattr[attr] = CfgCache( path, self._priority )
|
||||||
return self._rattr[attr]
|
return self._rattr[attr]
|
||||||
|
|
||||||
|
def _hasCachedParam ( self, elements ):
|
||||||
|
print( elements )
|
||||||
|
if not self._rattr.has_key(elements[0]):
|
||||||
|
return False
|
||||||
|
if len(elements) == 1:
|
||||||
|
return True
|
||||||
|
rattr = self._rattr[ elements[0] ]
|
||||||
|
if not isinstance(rattr,CfgCache):
|
||||||
|
return False
|
||||||
|
return rattr._hasCachedParam( elements[1:] )
|
||||||
|
|
||||||
|
def hasCachedParam ( self, attr ):
|
||||||
|
return self._hasCachedParam( attr.split('.') )
|
||||||
|
|
||||||
def apply ( self, priority=None ):
|
def apply ( self, priority=None ):
|
||||||
"""Apply the parameters values stored in the cache to the ``Cfg`` database."""
|
"""Apply the parameters values stored in the cache to the ``Cfg`` database."""
|
||||||
if priority is None: priority = self._priority
|
if priority is None: priority = self._priority
|
||||||
|
|
|
@ -79,6 +79,8 @@ def classdecorator ( cls ):
|
||||||
be the case.
|
be the case.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def isprop ( attr ): return isinstance( attr, property )
|
||||||
|
|
||||||
def wrappedSetattr ( self, attr, v ):
|
def wrappedSetattr ( self, attr, v ):
|
||||||
if attr != '_baseClass' and self._baseClass.__dict__.has_key(attr):
|
if attr != '_baseClass' and self._baseClass.__dict__.has_key(attr):
|
||||||
self._baseClass.__setattr__( attr, v )
|
self._baseClass.__setattr__( attr, v )
|
||||||
|
@ -87,10 +89,16 @@ def classdecorator ( cls ):
|
||||||
def wrappedGetattr ( self, attr ):
|
def wrappedGetattr ( self, attr ):
|
||||||
if attr == '_baseClass': return self.__dict__['_baseClass']
|
if attr == '_baseClass': return self.__dict__['_baseClass']
|
||||||
if self.__dict__.has_key(attr): return self.__dict__[attr]
|
if self.__dict__.has_key(attr): return self.__dict__[attr]
|
||||||
if not hasattr(self._baseClass,attr):
|
selfClass = type( self )
|
||||||
raise AttributeError( '\'{}\' object has no attribute \'{}\'' \
|
if selfClass.__dict__.has_key(attr):
|
||||||
|
prop = selfClass.__dict__[attr]
|
||||||
|
if isprop(prop):
|
||||||
|
return prop.__get__(self)
|
||||||
|
return prop
|
||||||
|
if not hasattr(self,'_baseClass'):
|
||||||
|
raise AttributeError( '\'{}\' object has no attribute or method named \'{}\'' \
|
||||||
.format(self.__class__.__name__,attr) )
|
.format(self.__class__.__name__,attr) )
|
||||||
return getattr( self._baseClass, attr )
|
return wrappedGetattr( self._baseClass, attr )
|
||||||
|
|
||||||
classInit = cls.__init__
|
classInit = cls.__init__
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue