22 lines
545 B
Python
22 lines
545 B
Python
import functools
|
|
|
|
|
|
def rgetattr(obj, attr, *args):
|
|
|
|
def _getattr(obj, attr):
|
|
return getattr(obj, attr, *args)
|
|
|
|
return functools.reduce(_getattr, [obj] + attr.split('.'))
|
|
|
|
|
|
def rsetattr(obj, attr, val):
|
|
pre, _, post = attr.rpartition('.')
|
|
return setattr(rgetattr(obj, pre) if pre else obj, post, val)
|
|
|
|
# using wonder's beautiful simplification:
|
|
# https://stackoverflow.com/questions/31174295/getattr-and-setattr-on-nested-objects/31174427?noredirect=1#comment86638618_31174427
|
|
|
|
|
|
class ValidationError(Exception):
|
|
pass
|