<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def set_notifier_path(self, notifier, path):
 """Sets the notifier, and the path from the path from block root Args: notifier (Notifier):
 The Notifier to tell when endpoint data changes path (list):
 The absolute path to get to this object """

        # type: (Union[Notifier, DummyNotifier], List[str]) -> None
        # This function should either change from the DummyNotifier or to
        # the DummyNotifier, never between two valid notifiers
        assert self.notifier is Model.notifier or notifier is Model.notifier, \
            "Already have a notifier %s path %s" % (self.notifier, self.path)
        self.notifier = notifier
        self.path = path
        # Tell all our children too
        for name, ct in self.call_types.items():
            if ct.is_mapping:
                child = getattr(self, name)
                if child and issubclass(ct.typ[1], Model):
                    for k, v in child.items():
                        v.set_notifier_path(notifier, self.path + [name, k])
            elif issubclass(ct.typ, Model):
                assert not ct.is_array, \
                    "Can't deal with Arrays of Models %s" % ct
                child = getattr(self, name)
                child.set_notifier_path(notifier, self.path + [name])