+ def log_stage(self, stage, **kwargs):
+ def as_json(element):
+ if callable(element):
+ return inspect.getsource(element).strip()
+ elif hasattr(element, "as_json"):
+ return element.as_json()
+ else:
+ return element
+
+ args = { k: as_json(v) for k, v in kwargs.items() }
+ args_str = ["{}={}".format(k, v) for k, v in args.items()]