Fixed a bug in the attr lockfunc to make it properly handle comparison for Nonetypes and bools as well as other values. Also fixed a malformed call for a default value. Resolves #753.

This commit is contained in:
Griatch 2015-06-01 21:56:29 +02:00
parent 8e134af019
commit 11750be556

View file

@ -277,12 +277,12 @@ def pid(accessing_obj, accessed_obj, *args, **kwargs):
# this is more efficient than multiple if ... elif statments
CF_MAPPING = {'eq': lambda val1, val2: val1 == val2 or int(val1) == int(val2),
'gt': lambda val1, val2: int(val1) > int(val2),
'lt': lambda val1, val2: int(val1) < int(val2),
'ge': lambda val1, val2: int(val1) >= int(val2),
'le': lambda val1, val2: int(val1) <= int(val2),
'ne': lambda val1, val2: int(val1) != int(val2),
CF_MAPPING = {'eq': lambda val1, val2: val1 == val2 or str(val1) == str(val2) or float(val1) == float(val2),
'gt': lambda val1, val2: float(val1) > float(val2),
'lt': lambda val1, val2: float(val1) < float(val2),
'ge': lambda val1, val2: float(val1) >= float(val2),
'le': lambda val1, val2: float(val1) <= float(val2),
'ne': lambda val1, val2: float(val1) != float(val2),
'default': lambda val1, val2: False}
@ -322,10 +322,10 @@ def attr(accessing_obj, accessed_obj, *args, **kwargs):
def valcompare(val1, val2, typ='eq'):
"compare based on type"
try:
return CF_MAPPING.get(typ, 'default')(val1, val2)
return CF_MAPPING.get(typ, CF_MAPPING['default'])(val1, val2)
except Exception:
# this might happen if we try to compare two things
# that cannot be compared
# this might happen if we try to compare two things that
# cannot be compared
return False
if hasattr(accessing_obj, "obj"):