[bugfix] PickingResults raised incorrect error on missing attribute
Accessing a non existing attribute raised a KeyError instead of an AttributeError, breaking methods that relied on the correct error type. Maybe this fixes the __setstate__ bug during event picking from GUI.
This commit is contained in:
parent
d4e2f4a070
commit
45370e2c67
@ -192,7 +192,8 @@ class PickingParameters(object):
|
||||
|
||||
class PickingResults(dict):
|
||||
"""
|
||||
Store picking results
|
||||
Used to store picking results.
|
||||
PickingResults is a dict like class that adds attribute (dot) access to the dictionaries values.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
@ -229,11 +230,21 @@ class PickingResults(dict):
|
||||
self.spe = None # symmetrized picking error
|
||||
self.weight = 4 # weight of onset
|
||||
|
||||
def __setattr__(self, key, value):
|
||||
self[key] = value
|
||||
# to correctly provide dot access to dictionary attributes, all attribute access of the class is forwarded to the
|
||||
# dictionary
|
||||
def __getattr__(self, item):
|
||||
"""Override getattr to return an AttributeError instead of a KeyError when the instance doesn't have the
|
||||
attribute.
|
||||
"""
|
||||
try:
|
||||
attr = dict.__getitem__(self, item)
|
||||
except KeyError:
|
||||
raise AttributeError('{classname} has no attribute {attrname}'.format(classname=self.__class__.__name__,
|
||||
attrname=item))
|
||||
return attr
|
||||
|
||||
def __getattr__(self, key):
|
||||
return self[key]
|
||||
__setattr__ = dict.__setitem__
|
||||
__delattr__ = dict.__delitem__
|
||||
|
||||
|
||||
class PickingContainer:
|
||||
|
Loading…
Reference in New Issue
Block a user