Auto_assign Callback
KwargsHelper.auto_assign() method automatically assigns all key-value pairs to class.
Assigns all of the key, value pairs passed into constructor to class instance,
unless the event is canceled in BeforeAssignAutoEventArgs via
KwargsHelper.add_handler_before_assign_auto() callback.
MyClass._arg_before_cb() callback method reads conditions before attribue and value are assigned.
If required conditions are not met then cancel can be set.
from kwhelp import KwargsHelper, AfterAssignAutoEventArgs, BeforeAssignAutoEventArgs
class MyClass:
def __init__(self, **kwargs):
kw = KwargsHelper(originator=self, obj_kwargs={**kwargs}, field_prefix="")
kw.add_handler_before_assign_auto(self._arg_before_cb)
kw.add_handler_after_assign_auto(self._arg_after_cb)
kw.auto_assign()
def _arg_before_cb(self, helper: KwargsHelper,
args: BeforeAssignAutoEventArgs) -> None:
# callback function before value assigned to attribute
if args.key == 'loop_count' and args.field_value < 0:
# cancel will raise CancelEventError unless
# KwargsHelper constructor has cancel_error=False
args.cancel = True
if args.key == 'name' and args.field_value == 'unknown':
args.field_value = 'None'
def _arg_after_cb(self, helper: KwargsHelper,
args: AfterAssignAutoEventArgs) -> None:
# callback function after value assigned to attribute
if args.key == 'name' and args.field_value == 'unknown':
raise ValueError(
f"{args.key} This should never happen. value was suppose to be reassigned")
In the following case key, value args are automatically assigned to class.
>>> my_class = MyClass(exporter='json', file_name='data.json', loop_count=3)
>>> print(my_class.exporter)
json
>>> print(my_class.file_name)
data.json
>>> print(my_class.loop_count)
3
In the following case my_class.name value is changed from "unknown" to "None" in callback
MyClass._arg_before_cb() method.
>>> my_class = MyClass(exporter='json', file_name='data.json', loop_count=3, name="unknown")
>>> print(my_class.exporter)
json
>>> print(my_class.file_name)
data.json
>>> print(my_class.loop_count)
3
>>> print(my_class.name)
None
In the following case loop_count is a negative number which triggers a CancelEventError
in MyClass._arg_before_cb().
>>> my_class = MyClass(exporter='json', file_name='data.json', loop_count=-1)
kwhelp.CancelEventError: KwargsHelper.auto_assign() canceled in 'BeforeAssignBlindEventArgs'
Note
If KwargsHelper constructor has cancel_error set to False then
no error will be raised when BeforeAssignAutoEventArgs.cancel is set to True.