optimize
This commit is contained in:
@ -121,6 +121,7 @@ class OptionBag:
|
||||
'config_bag',
|
||||
'ori_option', # original option (for example useful for symlinkoption)
|
||||
'properties', # properties of current option
|
||||
'properties_setted',
|
||||
'apply_requires', # apply requires or not for this option
|
||||
'fromconsistency' # history for consistency
|
||||
)
|
||||
@ -151,8 +152,15 @@ class OptionBag:
|
||||
return self.option
|
||||
elif key == 'apply_requires':
|
||||
return True
|
||||
elif key == 'properties_setted':
|
||||
return False
|
||||
raise KeyError('unknown key {} for OptionBag'.format(key)) # pragma: no cover
|
||||
|
||||
def __setattr__(self, key, val):
|
||||
super().__setattr__(key, val)
|
||||
if key == 'properties':
|
||||
self.properties_setted = True
|
||||
|
||||
def __delattr__(self, key):
|
||||
if key in ['properties', 'permissives']:
|
||||
try:
|
||||
@ -379,12 +387,12 @@ class Settings(object):
|
||||
# get properties and permissive methods
|
||||
|
||||
def get_context_properties(self):
|
||||
is_cached, props = self._p_.getcache(None,
|
||||
None,
|
||||
None,
|
||||
{},
|
||||
{},
|
||||
'context_props')
|
||||
is_cached, props, validated = self._p_.getcache(None,
|
||||
None,
|
||||
None,
|
||||
{},
|
||||
{},
|
||||
'context_props')
|
||||
if not is_cached:
|
||||
props = self._p_.getproperties(None,
|
||||
self.default_properties)
|
||||
@ -392,7 +400,8 @@ class Settings(object):
|
||||
None,
|
||||
props,
|
||||
{},
|
||||
props)
|
||||
props,
|
||||
True)
|
||||
return props
|
||||
|
||||
def getproperties(self,
|
||||
@ -410,12 +419,12 @@ class Settings(object):
|
||||
|
||||
if apply_requires:
|
||||
props = config_bag.properties
|
||||
is_cached, props = self._p_.getcache(path,
|
||||
config_bag.expiration_time,
|
||||
index,
|
||||
props,
|
||||
{},
|
||||
'self_props')
|
||||
is_cached, props, validated = self._p_.getcache(path,
|
||||
config_bag.expiration_time,
|
||||
index,
|
||||
props,
|
||||
{},
|
||||
'self_props')
|
||||
else:
|
||||
is_cached = False
|
||||
if not is_cached:
|
||||
@ -431,7 +440,8 @@ class Settings(object):
|
||||
index,
|
||||
props,
|
||||
props,
|
||||
config_bag.properties)
|
||||
config_bag.properties,
|
||||
True)
|
||||
return props
|
||||
|
||||
def get_context_permissives(self):
|
||||
@ -744,13 +754,18 @@ class Settings(object):
|
||||
#____________________________________________________________
|
||||
# validate properties
|
||||
def calc_raises_properties(self,
|
||||
option_properties,
|
||||
config_properties,
|
||||
config_permissives):
|
||||
properties = option_properties & config_properties - SPECIAL_PROPERTIES
|
||||
option_bag,
|
||||
apply_requires=True):
|
||||
raises_properties = option_bag.config_bag.properties - SPECIAL_PROPERTIES
|
||||
# remove global permissive properties
|
||||
if properties and ('permissive' in config_properties):
|
||||
properties -= config_permissives
|
||||
if raises_properties and ('permissive' in raises_properties):
|
||||
raises_properties -= option_bag.config_bag.permissives
|
||||
if apply_requires and option_bag.properties_setted:
|
||||
option_properties = option_bag.properties
|
||||
else:
|
||||
option_properties = self.getproperties(option_bag,
|
||||
apply_requires=apply_requires)
|
||||
properties = option_properties & raises_properties
|
||||
# at this point an option should not remain in properties
|
||||
return properties
|
||||
|
||||
@ -764,11 +779,9 @@ class Settings(object):
|
||||
was present
|
||||
"""
|
||||
config_bag = option_bag.config_bag
|
||||
if not config_bag.properties: # pragma: no cover
|
||||
if not config_bag.properties or config_bag.properties == frozenset(['cache']): # pragma: no cover
|
||||
return
|
||||
properties = self.calc_raises_properties(option_bag.properties,
|
||||
config_bag.properties,
|
||||
config_bag.permissives)
|
||||
properties = self.calc_raises_properties(option_bag)
|
||||
if properties != frozenset():
|
||||
raise PropertiesOptionError(option_bag,
|
||||
properties,
|
||||
|
Reference in New Issue
Block a user