I think that the name of the parameter passed to the ``save`` method might be not the best one, probably better to rename it, since it is called exactly the same as the method, didn't think about it.

Because if ``real_path`` must take into consideration every segment of the tree to update itself and the children i was taking the parent into consideration.

I think @andrewhayward  is right, update children shouldn't receive the parent as an argument, it should get the ``real_path`` of the parent and pass it on since that is the important part for updating the children if any.

    parent_prefix = self.parent.real_path if self.parent else None
    utils.update_children(self, prefix=parent_prefix)

Code not tested in the project.